This is a draft document only and has not been approved or adopted by the Green Software Foundation. this draft may not be relied upon for any purpose other than review of the current state of development.
Page Not Found
We could not find what you were looking for.
Please contact the owner of the site that linked you to the original URL and let them know their link is broken.
+
+
\ No newline at end of file
diff --git a/build/CNAME b/build/CNAME
new file mode 100644
index 0000000..155241c
--- /dev/null
+++ b/build/CNAME
@@ -0,0 +1 @@
+maturity-matrix.greensoftware.foundation
diff --git a/build/assets/css/styles.6428fb43.css b/build/assets/css/styles.6428fb43.css
new file mode 100644
index 0000000..ad099a1
--- /dev/null
+++ b/build/assets/css/styles.6428fb43.css
@@ -0,0 +1 @@
+@import url(https://fonts.googleapis.com/css2?family=Nunito+Sans&display=swap);.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}pre,table{overflow:auto}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.button,code{vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.markdown li,body{word-wrap:break-word}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:#0000}*{box-sizing:border-box}html{background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;-webkit-text-size-adjust:100%;text-size-adjust:100%}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.menuExternalLink_NmtK,.row--align-center{align-items:center}.row--align-stretch{align-items:stretch}.row--align-baseline{align-items:baseline}.col{--ifm-col-width:100%;flex:1 0;margin-left:0;max-width:var(--ifm-col-width)}.padding-bottom--none,.padding-vert--none{padding-bottom:0!important}.padding-top--none,.padding-vert--none{padding-top:0!important}.padding-horiz--none,.padding-left--none{padding-left:0!important}.padding-horiz--none,.padding-right--none{padding-right:0!important}.col[class*=col--]{flex:0 0 var(--ifm-col-width)}.col--1{--ifm-col-width:8.33333%}.col--offset-1{margin-left:8.33333%}.col--2{--ifm-col-width:16.66667%}.col--offset-2{margin-left:16.66667%}.col--3{--ifm-col-width:25%}.col--offset-3{margin-left:25%}.col--4{--ifm-col-width:33.33333%}.col--offset-4{margin-left:33.33333%}.col--5{--ifm-col-width:41.66667%}.col--offset-5{margin-left:41.66667%}.col--6{--ifm-col-width:50%}.col--offset-6{margin-left:50%}.col--7{--ifm-col-width:58.33333%}.col--offset-7{margin-left:58.33333%}.col--8{--ifm-col-width:66.66667%}.col--offset-8{margin-left:66.66667%}.col--9{--ifm-col-width:75%}.col--offset-9{margin-left:75%}.col--10{--ifm-col-width:83.33333%}.col--offset-10{margin-left:83.33333%}.col--11{--ifm-col-width:91.66667%}.col--offset-11{margin-left:91.66667%}.col--12{--ifm-col-width:100%}.col--offset-12{margin-left:100%}.margin-horiz--none,.margin-left--none{margin-left:0!important}.margin--none{margin:0!important}.margin-bottom--xs,.margin-vert--xs{margin-bottom:.25rem!important}.margin-top--xs,.margin-vert--xs{margin-top:.25rem!important}.margin-horiz--xs,.margin-left--xs{margin-left:.25rem!important}.margin-horiz--xs,.margin-right--xs{margin-right:.25rem!important}.margin--xs{margin:.25rem!important}.margin-bottom--sm,.margin-vert--sm{margin-bottom:.5rem!important}.margin-top--sm,.margin-vert--sm{margin-top:.5rem!important}.margin-horiz--sm,.margin-left--sm{margin-left:.5rem!important}.margin-horiz--sm,.margin-right--sm{margin-right:.5rem!important}.margin--sm{margin:.5rem!important}.margin-bottom--md,.margin-vert--md{margin-bottom:1rem!important}.margin-top--md,.margin-vert--md{margin-top:1rem!important}.margin-horiz--md,.margin-left--md{margin-left:1rem!important}.margin-horiz--md,.margin-right--md{margin-right:1rem!important}.margin--md{margin:1rem!important}.margin-bottom--lg,.margin-vert--lg{margin-bottom:2rem!important}.margin-top--lg,.margin-vert--lg{margin-top:2rem!important}.margin-horiz--lg,.margin-left--lg{margin-left:2rem!important}.margin-horiz--lg,.margin-right--lg{margin-right:2rem!important}.margin--lg{margin:2rem!important}.margin-bottom--xl,.margin-vert--xl{margin-bottom:5rem!important}.margin-top--xl,.margin-vert--xl{margin-top:5rem!important}.margin-horiz--xl,.margin-left--xl{margin-left:5rem!important}.margin-horiz--xl,.margin-right--xl{margin-right:5rem!important}.margin--xl{margin:5rem!important}.padding--none{padding:0!important}.padding-bottom--xs,.padding-vert--xs{padding-bottom:.25rem!important}.padding-top--xs,.padding-vert--xs{padding-top:.25rem!important}.padding-horiz--xs,.padding-left--xs{padding-left:.25rem!important}.padding-horiz--xs,.padding-right--xs{padding-right:.25rem!important}.padding--xs{padding:.25rem!important}.padding-bottom--sm,.padding-vert--sm{padding-bottom:.5rem!important}.padding-top--sm,.padding-vert--sm{padding-top:.5rem!important}.padding-horiz--sm,.padding-left--sm{padding-left:.5rem!important}.padding-horiz--sm,.padding-right--sm{padding-right:.5rem!important}.padding--sm{padding:.5rem!important}.padding-bottom--md,.padding-vert--md{padding-bottom:1rem!important}.padding-top--md,.padding-vert--md{padding-top:1rem!important}.padding-horiz--md,.padding-left--md{padding-left:1rem!important}.padding-horiz--md,.padding-right--md{padding-right:1rem!important}.padding--md{padding:1rem!important}.padding-bottom--lg,.padding-vert--lg{padding-bottom:2rem!important}.padding-top--lg,.padding-vert--lg{padding-top:2rem!important}.padding-horiz--lg,.padding-left--lg{padding-left:2rem!important}.padding-horiz--lg,.padding-right--lg{padding-right:2rem!important}.padding--lg{padding:2rem!important}.padding-bottom--xl,.padding-vert--xl{padding-bottom:5rem!important}.padding-top--xl,.padding-vert--xl{padding-top:5rem!important}.padding-horiz--xl,.padding-left--xl{padding-left:5rem!important}.padding-horiz--xl,.padding-right--xl{padding-right:5rem!important}.padding--xl{padding:5rem!important}code{background-color:var(--ifm-code-background);border:.1rem solid #0000001a;border-radius:var(--ifm-code-border-radius);font-family:var(--ifm-font-family-monospace);font-size:var(--ifm-code-font-size);padding:var(--ifm-code-padding-vertical) var(--ifm-code-padding-horizontal)}a code{color:inherit}pre{background-color:var(--ifm-pre-background);border-radius:var(--ifm-pre-border-radius);color:var(--ifm-pre-color);font:var(--ifm-code-font-size)/var(--ifm-pre-line-height) var(--ifm-font-family-monospace);padding:var(--ifm-pre-padding)}pre code{background-color:initial;border:none;font-size:100%;line-height:inherit;padding:0}kbd{background-color:var(--ifm-color-emphasis-0);border:1px solid var(--ifm-color-emphasis-400);border-radius:.2rem;box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-400);color:var(--ifm-color-emphasis-800);font:80% var(--ifm-font-family-monospace);padding:.15rem .3rem}h1,h2,h3,h4,h5,h6{color:var(--ifm-heading-color);font-family:var(--ifm-heading-font-family);font-weight:var(--ifm-heading-font-weight);line-height:var(--ifm-heading-line-height);margin:var(--ifm-heading-margin-top) 0 var(--ifm-heading-margin-bottom) 0}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}img{max-width:100%}img[align=right]{padding-left:var(--image-alignment-padding)}img[align=left]{padding-right:var(--image-alignment-padding)}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol,ol ul,ul ol,ul ul{margin:0}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0}.shadow--lw{box-shadow:var(--ifm-global-shadow-lw)!important}.shadow--md{box-shadow:var(--ifm-global-shadow-md)!important}.shadow--tl{box-shadow:var(--ifm-global-shadow-tl)!important}.text--primary{color:var(--ifm-color-primary)}.text--secondary{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_Gvgb,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area[href].breadcrumbs__link:hover{background:var(--ifm-breadcrumb-item-background-active);text-decoration:none}.breadcrumbs--sm{--ifm-breadcrumb-size-multiplier:0.8}.breadcrumbs--lg{--ifm-breadcrumb-size-multiplier:1.2}.button{background-color:var(--ifm-button-background-color);border:var(--ifm-button-border-width) solid var(--ifm-button-border-color);border-radius:var(--ifm-button-border-radius);cursor:pointer;font-size:calc(.875rem*var(--ifm-button-size-multiplier));font-weight:var(--ifm-button-font-weight);line-height:1.5;padding:calc(var(--ifm-button-padding-vertical)*var(--ifm-button-size-multiplier)) calc(var(--ifm-button-padding-horizontal)*var(--ifm-button-size-multiplier));text-align:center;transition-duration:var(--ifm-button-transition-duration);transition-property:color,background,border-color;-webkit-user-select:none;user-select:none;white-space:nowrap}.button,.button:hover{color:var(--ifm-button-color)}.button--outline{--ifm-button-color:var(--ifm-button-border-color)}.button--outline:hover{--ifm-button-background-color:var(--ifm-button-border-color)}.button--link{--ifm-button-border-color:#0000;color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}.button--link.button--active,.button--link:active,.button--link:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button.disabled,.button:disabled,.button[disabled]{opacity:.65;pointer-events:none}.button--sm{--ifm-button-size-multiplier:0.8}.button--lg{--ifm-button-size-multiplier:1.35}.button--block{display:block;width:100%}.button.button--secondary{color:var(--ifm-color-gray-900)}:where(.button--primary){--ifm-button-background-color:var(--ifm-color-primary);--ifm-button-border-color:var(--ifm-color-primary)}:where(.button--primary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-primary-dark);--ifm-button-border-color:var(--ifm-color-primary-dark)}.button--primary.button--active,.button--primary:active{--ifm-button-background-color:var(--ifm-color-primary-darker);--ifm-button-border-color:var(--ifm-color-primary-darker)}:where(.button--secondary){--ifm-button-background-color:var(--ifm-color-secondary);--ifm-button-border-color:var(--ifm-color-secondary)}:where(.button--secondary):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-secondary-dark);--ifm-button-border-color:var(--ifm-color-secondary-dark)}.button--secondary.button--active,.button--secondary:active{--ifm-button-background-color:var(--ifm-color-secondary-darker);--ifm-button-border-color:var(--ifm-color-secondary-darker)}:where(.button--success){--ifm-button-background-color:var(--ifm-color-success);--ifm-button-border-color:var(--ifm-color-success)}:where(.button--success):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-success-dark);--ifm-button-border-color:var(--ifm-color-success-dark)}.button--success.button--active,.button--success:active{--ifm-button-background-color:var(--ifm-color-success-darker);--ifm-button-border-color:var(--ifm-color-success-darker)}:where(.button--info){--ifm-button-background-color:var(--ifm-color-info);--ifm-button-border-color:var(--ifm-color-info)}:where(.button--info):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-info-dark);--ifm-button-border-color:var(--ifm-color-info-dark)}.button--info.button--active,.button--info:active{--ifm-button-background-color:var(--ifm-color-info-darker);--ifm-button-border-color:var(--ifm-color-info-darker)}:where(.button--warning){--ifm-button-background-color:var(--ifm-color-warning);--ifm-button-border-color:var(--ifm-color-warning)}:where(.button--warning):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-warning-dark);--ifm-button-border-color:var(--ifm-color-warning-dark)}.button--warning.button--active,.button--warning:active{--ifm-button-background-color:var(--ifm-color-warning-darker);--ifm-button-border-color:var(--ifm-color-warning-darker)}:where(.button--danger){--ifm-button-background-color:var(--ifm-color-danger);--ifm-button-border-color:var(--ifm-color-danger)}:where(.button--danger):not(.button--outline):hover{--ifm-button-background-color:var(--ifm-color-danger-dark);--ifm-button-border-color:var(--ifm-color-danger-dark)}.button--danger.button--active,.button--danger:active{--ifm-button-background-color:var(--ifm-color-danger-darker);--ifm-button-border-color:var(--ifm-color-danger-darker)}.button-group{display:inline-flex;gap:var(--ifm-button-group-spacing)}.button-group>.button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.button-group>.button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.button-group--block{display:flex;justify-content:stretch}.button-group--block>.button{flex-grow:1}.card{background-color:var(--ifm-card-background-color);border-radius:var(--ifm-card-border-radius);box-shadow:var(--ifm-global-shadow-lw);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);text-decoration:none}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.dropdown__link--active,.dropdown__link--active:hover{--ifm-dropdown-link-color:var(--ifm-link-color)}.dropdown>.navbar__link:after{border-color:currentcolor #0000;border-style:solid;border-width:.4em .4em 0;content:"";margin-left:.3em;position:relative;top:2px;transform:translateY(-50%)}.footer{background-color:var(--ifm-footer-background-color);color:var(--ifm-footer-color);padding:var(--ifm-footer-padding-vertical) var(--ifm-footer-padding-horizontal)}.footer--dark{--ifm-footer-background-color:#303846;--ifm-footer-color:var(--ifm-footer-link-color);--ifm-footer-link-color:var(--ifm-color-secondary);--ifm-footer-title-color:var(--ifm-color-white)}.footer__links{margin-bottom:1rem}.footer__link-item{color:var(--ifm-footer-link-color);line-height:2}.footer__link-item:hover{color:var(--ifm-footer-link-hover-color)}.footer__link-separator{margin:0 var(--ifm-footer-link-horizontal-spacing)}.footer__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.footer__title{color:var(--ifm-footer-title-color);font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base);margin-bottom:var(--ifm-heading-margin-bottom)}.menu,.navbar__link{font-weight:var(--ifm-font-weight-semibold)}.docItemContainer_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_BuS1>:last-child,.collapsibleContent_i85q p:last-child,.details_lb9f>summary>p:last-child,.footer__items{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{content:"";height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter)}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.navbar__items--center .navbar__brand,body{margin:0}.menu__link--active,.menu__link--active:hover{color:var(--ifm-menu-color-active)}.navbar__brand,.navbar__link{color:var(--ifm-navbar-link-color)}.menu__link--active:not(.menu__link--sublist){background-color:var(--ifm-menu-color-background-active)}.menu__caret:before{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem}.navbar--dark,html[data-theme=dark]{--ifm-menu-link-sublist-icon-filter:invert(100%) sepia(94%) saturate(17%) hue-rotate(223deg) brightness(104%) contrast(98%)}.navbar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-navbar-shadow);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;position:fixed;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;left:0;top:0;visibility:hidden}.navbar__inner{display:flex;flex-wrap:wrap;justify-content:space-between;width:100%}.navbar__brand{align-items:center;display:flex;margin-right:1rem;min-width:0}.navbar__brand:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:1rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);transform:translate3d(-100%,0,0);transition-property:opacity,visibility,transform;width:var(--ifm-navbar-sidebar-width)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar__items{transform:translateZ(0)}.navbar-sidebar--show .navbar-sidebar,.navbar-sidebar--show .navbar-sidebar__backdrop{opacity:1;visibility:visible}.navbar-sidebar__backdrop{background-color:#0009;right:0;transition-property:opacity,visibility}.navbar-sidebar__brand{align-items:center;box-shadow:var(--ifm-navbar-shadow);display:flex;flex:1;height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar-sidebar__items{display:flex;height:calc(100% - var(--ifm-navbar-height));transition:transform var(--ifm-transition-fast) ease-in-out}.navbar-sidebar__items--show-secondary{transform:translate3d(calc((var(--ifm-navbar-sidebar-width))*-1),0,0)}.navbar-sidebar__item{flex-shrink:0;padding:.5rem;width:calc(var(--ifm-navbar-sidebar-width))}.navbar-sidebar__back{background:var(--ifm-menu-color-background-active);font-size:15px;font-weight:var(--ifm-button-font-weight);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.navbar-sidebar__close{display:flex;margin-left:auto}.pagination{column-gap:var(--ifm-pagination-page-spacing);display:flex;font-size:var(--ifm-pagination-font-size);padding-left:0}.pagination--sm{--ifm-pagination-font-size:0.8rem;--ifm-pagination-padding-horizontal:0.8rem;--ifm-pagination-padding-vertical:0.2rem}.pagination--lg{--ifm-pagination-font-size:1.2rem;--ifm-pagination-padding-horizontal:1.2rem;--ifm-pagination-padding-vertical:0.3rem}.pagination__item{display:inline-flex}.pagination__item>span{padding:var(--ifm-pagination-padding-vertical)}.pagination__item--active .pagination__link{color:var(--ifm-pagination-color-active)}.pagination__item--active .pagination__link,.pagination__item:not(.pagination__item--active):hover .pagination__link{background:var(--ifm-pagination-item-active-background)}.pagination__item--disabled,.pagination__item[disabled]{opacity:.25;pointer-events:none}.pagination__link{border-radius:var(--ifm-pagination-border-radius);color:var(--ifm-font-color-base);display:inline-block;padding:var(--ifm-pagination-padding-vertical) var(--ifm-pagination-padding-horizontal);transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination__link:hover{text-decoration:none}.pagination-nav{display:grid;grid-gap:var(--ifm-spacing-horizontal);gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.pagination-nav__link{border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-pagination-nav-border-radius);display:block;height:100%;line-height:var(--ifm-heading-line-height);padding:var(--ifm-global-spacing);transition:border-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pagination-nav__link:hover{border-color:var(--ifm-pagination-nav-color-hover);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.pagination-nav__label{font-size:var(--ifm-h4-font-size);font-weight:var(--ifm-heading-font-weight);word-break:break-word}.pagination-nav__link--prev .pagination-nav__label:before{content:"« "}.pagination-nav__link--next .pagination-nav__label:after{content:" »"}.pagination-nav__sublabel{color:var(--ifm-color-content-secondary);font-size:var(--ifm-h5-font-size);font-weight:var(--ifm-font-weight-semibold);margin-bottom:.25rem}.pills__item,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs,:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}:root,[data-theme=dark]{--background-color:#fbfcf6}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}:root{--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#006d69;--ifm-color-primary-dark:#00524f;--ifm-color-primary-darker:#003734;--ifm-color-primary-darkest:#002c2a;--ifm-color-primary-light:#80b6b4;--ifm-color-primary-lighter:#bfdbd9;--ifm-color-primary-lightest:#e5f0f0;--ifm-color-content:#3c3c3c;--ifm-heading-color:var(--ifm-color-primary);--ifm-font-size-base:18px;--ifm-code-font-size:95%;--docusaurus-highlighted-code-line-bg:#0000001a;--docusaurus-announcement-bar-height:auto;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}[data-theme=dark]{--ifm-color-primary:#25c2a0;--ifm-color-primary-dark:#21af90;--ifm-color-primary-darker:#1fa588;--ifm-color-primary-darkest:#1a8870;--ifm-color-primary-light:#29d5b0;--ifm-color-primary-lighter:#32d8b4;--ifm-color-primary-lightest:#4fddbf;--ifm-navbar-background-color:var(--background-color);--docusaurus-highlighted-code-line-bg:#0000004d}body{background-color:var(--background-color);font-family:Nunito Sans}.navbar__brand,.wordWrapButtonEnabled_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.markdown{--ifm-h1-vertical-rhythm-top:3;--ifm-h2-vertical-rhythm-top:2;--ifm-h3-vertical-rhythm-top:1.5;--ifm-heading-vertical-rhythm-top:1.25;--ifm-h1-vertical-rhythm-bottom:1.25;--ifm-heading-vertical-rhythm-bottom:1;margin-top:50px}.markdown>h1{font-size:2.5rem;font-weight:700}.markdown>h2{font-size:1.5rem;font-weight:700}.markdown>h2,.markdown>h3{margin-bottom:5px}.alert--warning{font-size:14px}.theme-edit-this-page{font-size:80%}.menu{font-size:18px}.footer{font-size:.7rem}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#__docusaurus-base-url-issue-banner-container,.navbarSearchContainer_Bca1:empty,.themedComponent_mlkZ,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit;text-decoration:underline}.announcementBar_mb4j{align-items:center;background-color:var(--ifm-color-white);border-bottom:1px solid var(--ifm-color-emphasis-100);color:var(--ifm-color-black);display:flex;height:var(--docusaurus-announcement-bar-height)}.announcementBarPlaceholder_vyr4{flex:0 0 10px}.announcementBarClose_gvF7{align-self:stretch;flex:0 0 30px}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedComponent--dark_xIcU,[data-theme=light] .themedComponent--light_NVdE,html:not([data-theme]) .themedComponent--light_NVdE{display:initial}.iconExternalLink_nPIU{margin-left:.3rem}.dropdownNavbarItemMobile_S0Fm{cursor:pointer}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.errorBoundaryFallback_VBag{color:red;padding:.55rem}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.anchorWithStickyNavbar_LWe7{scroll-margin-top:calc(var(--ifm-navbar-height) + .5rem)}.anchorWithHideOnScrollNavbar_WYt5{scroll-margin-top:.5rem}.hash-link{opacity:0;padding-left:.5rem;transition:opacity var(--ifm-transition-fast);-webkit-user-select:none;user-select:none}.hash-link:before{content:"#"}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.lastUpdated_JAkA{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.tocCollapsibleContent_vkbj a{display:block}.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}:where(:root){--docusaurus-highlighted-code-line-bg:#484d5b}:where([data-theme=dark]){--docusaurus-highlighted-code-line-bg:#646464}.theme-code-block-highlighted-line{background-color:var(--docusaurus-highlighted-code-line-bg);display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}.codeLine_lJS_{counter-increment:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{left:0;position:absolute;top:0;fill:currentColor;height:inherit;opacity:inherit;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:#0000 #0000 #0000 var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.img_ev3q{height:auto}.admonition_xJq3{margin-bottom:1em}.admonitionHeading_Gvgb{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family)}.admonitionHeading_Gvgb:not(:last-child){margin-bottom:.3rem}.admonitionHeading_Gvgb code{text-transform:none}.admonitionIcon_Rf37{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_Rf37 svg{display:inline-block;height:1.6em;width:1.6em;fill:var(--ifm-alert-foreground-color)}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}.backToTopButton_sjWU{background-color:var(--ifm-color-emphasis-200);border-radius:50%;bottom:1.3rem;box-shadow:var(--ifm-global-shadow-lw);height:3rem;opacity:0;position:fixed;right:1.3rem;transform:scale(0);transition:all var(--ifm-transition-fast) var(--ifm-transition-timing-default);visibility:hidden;width:3rem;z-index:calc(var(--ifm-z-index-fixed) - 1)}.backToTopButton_sjWU:after{background-color:var(--ifm-color-emphasis-1000);content:" ";display:inline-block;height:100%;-webkit-mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;mask:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem no-repeat;width:100%}.backToTopButtonShow_xfvO{opacity:1;transform:scale(1);visibility:visible}[data-theme=dark]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.collapseSidebarButton_PEFL{display:none;margin:0}.docSidebarContainer_YfHR,.sidebarLogo_isFc{display:none}.docMainContainer_TBSr,.docRoot_UBD9{display:flex;width:100%}.docsWrapper_hBAB{display:flex;flex:1 0 auto}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_TmdG{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.navbarSearchContainer_Bca1{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.lastUpdated_JAkA{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn{max-width:75%!important}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_i1dp,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_TmdG:focus,.expandButton_TmdG:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{align-items:center;color:inherit!important;display:flex!important;margin:0 var(--ifm-navbar-padding-horizontal);max-height:var(--ifm-navbar-height);min-height:var(--ifm-navbar-height);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_TmdG{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_i1dp{transform:rotate(180deg)}.docSidebarContainer_YfHR{border-right:1px solid var(--ifm-toc-border-color);clip-path:inset(0);display:block;margin-top:calc(var(--ifm-navbar-height)*-1);transition:width var(--ifm-transition-fast) ease;width:var(--doc-sidebar-width);will-change:width}.docSidebarContainerHidden_DPk8{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_aRkj{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_TBSr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_lQrH{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_JWYK{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.navbarSearchContainer_Bca1{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}}@media (pointer:fine){.thin-scrollbar{scrollbar-width:thin}.thin-scrollbar::-webkit-scrollbar{height:var(--ifm-scrollbar-size);width:var(--ifm-scrollbar-size)}.thin-scrollbar::-webkit-scrollbar-track{background:var(--ifm-scrollbar-track-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb{background:var(--ifm-scrollbar-thumb-background-color);border-radius:10px}.thin-scrollbar::-webkit-scrollbar-thumb:hover{background:var(--ifm-scrollbar-thumb-hover-background-color)}}@media (prefers-reduced-motion:reduce){:root{--ifm-transition-fast:0ms;--ifm-transition-slow:0ms}}@media print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents,.tocMobile_ITEo{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}}
\ No newline at end of file
diff --git a/build/assets/files/maturity-matrix-817ef92da90901aadb6f35bb9c53750b.svg b/build/assets/files/maturity-matrix-817ef92da90901aadb6f35bb9c53750b.svg
new file mode 100644
index 0000000..bd52a9e
--- /dev/null
+++ b/build/assets/files/maturity-matrix-817ef92da90901aadb6f35bb9c53750b.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/build/assets/images/maturity-matrix-817ef92da90901aadb6f35bb9c53750b.svg b/build/assets/images/maturity-matrix-817ef92da90901aadb6f35bb9c53750b.svg
new file mode 100644
index 0000000..bd52a9e
--- /dev/null
+++ b/build/assets/images/maturity-matrix-817ef92da90901aadb6f35bb9c53750b.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/build/assets/js/0d5331fe.8fce4aeb.js b/build/assets/js/0d5331fe.8fce4aeb.js
new file mode 100644
index 0000000..f328542
--- /dev/null
+++ b/build/assets/js/0d5331fe.8fce4aeb.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkgsmm=self.webpackChunkgsmm||[]).push([[850],{3864:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>c});var i=r(5893),n=r(1151);const a={title:"What is a Maturity Matrix?",description:"Maturity matrices are used in fields like project management and cybersecurity to help organizations grok where they currently stand in terms of best practices",sidebar_position:2,sidebar_label:"Maturity Matrix?",hide_table_of_contents:!0},s="What is a Maturity Matrix?",o={id:"history",title:"What is a Maturity Matrix?",description:"Maturity matrices are used in fields like project management and cybersecurity to help organizations grok where they currently stand in terms of best practices",source:"@site/docs/history.md",sourceDirName:".",slug:"/history",permalink:"/history",draft:!1,unlisted:!1,editUrl:"https://github.com/Green-Software-Foundation/green-software-maturity-matrix/edit/dev/docs/history.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{title:"What is a Maturity Matrix?",description:"Maturity matrices are used in fields like project management and cybersecurity to help organizations grok where they currently stand in terms of best practices",sidebar_position:2,sidebar_label:"Maturity Matrix?",hide_table_of_contents:!0},sidebar:"tutorialSidebar",previous:{title:"Home",permalink:"/"},next:{title:"Green Maturity Matrix",permalink:"/gsmm/"}},l={},c=[{value:"The history of maturity matrices",id:"the-history-of-maturity-matrices",level:2}];function d(e){const t={em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",strong:"strong",ul:"ul",...(0,n.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.header,{children:(0,i.jsx)(t.h1,{id:"what-is-a-maturity-matrix",children:"What is a Maturity Matrix?"})}),"\n",(0,i.jsx)(t.p,{children:"Maturity matrices are used in fields like project management and cybersecurity to help organizations grok where they currently stand in terms of best practices, as well as the steps they can take to achieve higher levels of performance. The green software maturity matrix is a framework for assessing the level of a tech organization\u2019s ability to handle the energy transition."}),"\n",(0,i.jsx)(t.p,{children:"The purpose of moving up the GSMM levels is not merely to be \u201cethical\u201d or good. It is a risk management strategy to provide resilience to:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Tightening ESG and other (e.g. EU) reporting requirements around sustainable IT."}),"\n",(0,i.jsx)(t.li,{children:"Physical disruption to IT systems caused by climate change."}),"\n",(0,i.jsx)(t.li,{children:"Pricing changes, for example the impact of highly differential dynamic electricity tariffs or reuse, repair, and recycle rules from the EU."}),"\n",(0,i.jsx)(t.li,{children:"Hiring and retaining employees who want to be part of the solution to humanity\u2019s greatest challenge. This is particularly true for younger staff."}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"the-history-of-maturity-matrices",children:"The history of maturity matrices"}),"\n",(0,i.jsx)(t.p,{children:"The Capability Maturity Model Integration (CMMI), which is a bit of a mouthful, was originally developed by the Software Engineering Institute (SEI) at Carnegie Mellon University. The CMMI is a framework for assessing and guiding organizations' process improvement efforts, and has 5 maturity levels:"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.em,{children:"[[PLACEHOLDER FOR CMMI IMAGE]]"})}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Level 1 - Initial:"})," Processes are unpredictable, poorly controlled, and reactive at best."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Level 2 - Reactively managed:"})," Per-project processes. Often still reactive."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Level 3 - Defined:"})," Processes are standardized, documented, well understood and reviewed."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Level 4 - Quantitatively Managed:"})," Processes are measured and controlled."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Level 5 - Optimizing:"})," Continuous improvement occurs based on quantitative feedback."]}),"\n"]}),"\n",(0,i.jsx)(t.p,{children:"We reckon this broadly means:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Level 1:"})," You are floundering. No organization level strategy. Maybe a few individuals who care and/or are knowledgeable. Purely reactive. This is where most of us are on being green at this point."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Level 2:"})," You are starting to get some handle on it but without consistency. Mostly reactive. How advanced you are varies by project and team. You have the bare minimum of data."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Level 3:"})," You are good. You have decent, basic org-wide green tech knowledge and data. You have defined processes for handling that data that are applied across your organization."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Level 4:"})," You are awesome. You can measure your progress dynamically (i.e. you have real -time data)."]}),"\n",(0,i.jsxs)(t.li,{children:[(0,i.jsx)(t.strong,{children:"Level 5:"})," You have ascended to the next plane of existence. You monitor and improve based on your real-time data. You give aspirational talks at tech conferences and what people are aspiring to is what you have been doing for ages. You are the tech equivalent of a being of pure energy. Think Yoda with a keyboard."]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},1151:(e,t,r)=>{r.d(t,{Z:()=>o,a:()=>s});var i=r(7294);const n={},a=i.createContext(n);function s(e){const t=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:s(e.components),i.createElement(a.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/build/assets/js/17896441.a34154cf.js b/build/assets/js/17896441.a34154cf.js
new file mode 100644
index 0000000..aca75c0
--- /dev/null
+++ b/build/assets/js/17896441.a34154cf.js
@@ -0,0 +1 @@
+(self.webpackChunkgsmm=self.webpackChunkgsmm||[]).push([[918],{2501:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>Qt});var s=n(7294),a=n(1944),o=n(902),i=n(5893);const l=s.createContext(null);function c(e){let{children:t,content:n}=e;const a=function(e){return(0,s.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return(0,i.jsx)(l.Provider,{value:a,children:t})}function r(){const e=(0,s.useContext)(l);if(null===e)throw new o.i6("DocProvider");return e}function d(){const{metadata:e,frontMatter:t,assets:n}=r();return(0,i.jsx)(a.d,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var u=n(512),m=n(7524),h=n(5999),p=n(3692);function f(e){const{permalink:t,title:n,subLabel:s,isNext:a}=e;return(0,i.jsxs)(p.Z,{className:(0,u.Z)("pagination-nav__link",a?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[s&&(0,i.jsx)("div",{className:"pagination-nav__sublabel",children:s}),(0,i.jsx)("div",{className:"pagination-nav__label",children:n})]})}function x(e){const{previous:t,next:n}=e;return(0,i.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,h.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[t&&(0,i.jsx)(f,{...t,subLabel:(0,i.jsx)(h.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),n&&(0,i.jsx)(f,{...n,subLabel:(0,i.jsx)(h.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}function b(){const{metadata:e}=r();return(0,i.jsx)(x,{previous:e.previous,next:e.next})}var g=n(2263),j=n(143),v=n(5281),N=n(298),C=n(3797);const k={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,i.jsx)(h.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:(0,i.jsx)("b",{children:n.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,i.jsx)(h.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:(0,i.jsx)("b",{children:n.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function y(e){const t=k[e.versionMetadata.banner];return(0,i.jsx)(t,{...e})}function L(e){let{versionLabel:t,to:n,onClick:s}=e;return(0,i.jsx)(h.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:(0,i.jsx)("b",{children:(0,i.jsx)(p.Z,{to:n,onClick:s,children:(0,i.jsx)(h.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function B(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:s}}=(0,g.Z)(),{pluginId:a}=(0,j.gA)({failfast:!0}),{savePreferredVersionName:o}=(0,N.J)(a),{latestDocSuggestion:l,latestVersionSuggestion:c}=(0,j.Jo)(a),r=l??(d=c).docs.find((e=>e.id===d.mainDocId));var d;return(0,i.jsxs)("div",{className:(0,u.Z)(t,v.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,i.jsx)("div",{children:(0,i.jsx)(y,{siteTitle:s,versionMetadata:n})}),(0,i.jsx)("div",{className:"margin-top--md",children:(0,i.jsx)(L,{versionLabel:c.label,to:r.path,onClick:()=>o(c.name)})})]})}function _(e){let{className:t}=e;const n=(0,C.E)();return n.banner?(0,i.jsx)(B,{className:t,versionMetadata:n}):null}function w(e){let{className:t}=e;const n=(0,C.E)();return n.badge?(0,i.jsx)("span",{className:(0,u.Z)(t,v.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,i.jsx)(h.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label},children:"Version: {versionLabel}"})}):null}const Z={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function T(e){let{permalink:t,label:n,count:s,description:a}=e;return(0,i.jsxs)(p.Z,{href:t,title:a,className:(0,u.Z)(Z.tag,s?Z.tagWithCount:Z.tagRegular),children:[n,s&&(0,i.jsx)("span",{children:s})]})}const E={tags:"tags_jXut",tag:"tag_QGVx"};function H(e){let{tags:t}=e;return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("b",{children:(0,i.jsx)(h.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,i.jsx)("ul",{className:(0,u.Z)(E.tags,"padding--none","margin-left--sm"),children:t.map((e=>(0,i.jsx)("li",{className:E.tag,children:(0,i.jsx)(T,{...e})},e.permalink)))})]})}const I={iconEdit:"iconEdit_Z9Sw"};function M(e){let{className:t,...n}=e;return(0,i.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,u.Z)(I.iconEdit,t),"aria-hidden":"true",...n,children:(0,i.jsx)("g",{children:(0,i.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})})}function A(e){let{editUrl:t}=e;return(0,i.jsxs)(p.Z,{to:t,className:v.k.common.editThisPage,children:[(0,i.jsx)(M,{}),(0,i.jsx)(h.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}function S(e){void 0===e&&(e={});const{i18n:{currentLocale:t}}=(0,g.Z)(),n=function(){const{i18n:{currentLocale:e,localeConfigs:t}}=(0,g.Z)();return t[e].calendar}();return new Intl.DateTimeFormat(t,{calendar:n,...e})}function U(e){let{lastUpdatedAt:t}=e;const n=new Date(t),s=S({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(n);return(0,i.jsx)(h.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,i.jsx)("b",{children:(0,i.jsx)("time",{dateTime:n.toISOString(),itemProp:"dateModified",children:s})})},children:" on {date}"})}function V(e){let{lastUpdatedBy:t}=e;return(0,i.jsx)(h.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,i.jsx)("b",{children:t})},children:" by {user}"})}function z(e){let{lastUpdatedAt:t,lastUpdatedBy:n}=e;return(0,i.jsxs)("span",{className:v.k.common.lastUpdated,children:[(0,i.jsx)(h.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t?(0,i.jsx)(U,{lastUpdatedAt:t}):"",byUser:n?(0,i.jsx)(V,{lastUpdatedBy:n}):""},children:"Last updated{atDate}{byUser}"}),!1]})}const R={lastUpdated:"lastUpdated_JAkA"};function P(e){let{className:t,editUrl:n,lastUpdatedAt:s,lastUpdatedBy:a}=e;return(0,i.jsxs)("div",{className:(0,u.Z)("row",t),children:[(0,i.jsx)("div",{className:"col",children:n&&(0,i.jsx)(A,{editUrl:n})}),(0,i.jsx)("div",{className:(0,u.Z)("col",R.lastUpdated),children:(s||a)&&(0,i.jsx)(z,{lastUpdatedAt:s,lastUpdatedBy:a})})]})}function O(){const{metadata:e}=r(),{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:s,tags:a}=e,o=a.length>0,l=!!(t||n||s);return o||l?(0,i.jsxs)("footer",{className:(0,u.Z)(v.k.docs.docFooter,"docusaurus-mt-lg"),children:[o&&(0,i.jsx)("div",{className:(0,u.Z)("row margin-top--sm",v.k.docs.docFooterTagsRow),children:(0,i.jsx)("div",{className:"col",children:(0,i.jsx)(H,{tags:a})})}),l&&(0,i.jsx)(P,{className:(0,u.Z)("margin-top--sm",v.k.docs.docFooterEditMetaRow),editUrl:t,lastUpdatedAt:n,lastUpdatedBy:s})]}):null}var D=n(6043),$=n(6668);function W(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const s=n.slice(2,e.level);e.parentIndex=Math.max(...s),n[e.level]=t}));const s=[];return t.forEach((e=>{const{parentIndex:n,...a}=e;n>=0?t[n].children.push(a):s.push(a)})),s}function F(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:s}=e;return t.flatMap((e=>{const t=F({toc:e.children,minHeadingLevel:n,maxHeadingLevel:s});return function(e){return e.level>=n&&e.level<=s}(e)?[{...e,children:t}]:t}))}function q(e){const t=e.getBoundingClientRect();return t.top===t.bottom?q(e.parentNode):t}function G(e,t){let{anchorTopOffset:n}=t;const s=e.find((e=>q(e).top>=n));if(s){return function(e){return e.top>0&&e.bottom{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function Y(e){const t=(0,s.useRef)(void 0),n=J();(0,s.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:s,linkActiveClassName:a,minHeadingLevel:o,maxHeadingLevel:i}=e;function l(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(s),l=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const s=[];for(let a=t;a<=n;a+=1)s.push(`h${a}.anchor`);return Array.from(document.querySelectorAll(s.join()))}({minHeadingLevel:o,maxHeadingLevel:i}),c=G(l,{anchorTopOffset:n.current}),r=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(a),e.classList.add(a),t.current=e):e.classList.remove(a)}(e,e===r)}))}return document.addEventListener("scroll",l),document.addEventListener("resize",l),l(),()=>{document.removeEventListener("scroll",l),document.removeEventListener("resize",l)}}),[e,n])}function Q(e){let{toc:t,className:n,linkClassName:s,isChild:a}=e;return t.length?(0,i.jsx)("ul",{className:a?void 0:n,children:t.map((e=>(0,i.jsxs)("li",{children:[(0,i.jsx)(p.Z,{to:`#${e.id}`,className:s??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,i.jsx)(Q,{isChild:!0,toc:e.children,className:n,linkClassName:s})]},e.id)))}):null}const X=s.memo(Q);function K(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:a="table-of-contents__link",linkActiveClassName:o,minHeadingLevel:l,maxHeadingLevel:c,...r}=e;const d=(0,$.L)(),u=l??d.tableOfContents.minHeadingLevel,m=c??d.tableOfContents.maxHeadingLevel,h=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,s.useMemo)((()=>F({toc:W(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:u,maxHeadingLevel:m});return Y((0,s.useMemo)((()=>{if(a&&o)return{linkClassName:a,linkActiveClassName:o,minHeadingLevel:u,maxHeadingLevel:m}}),[a,o,u,m])),(0,i.jsx)(X,{toc:h,className:n,linkClassName:a,...r})}const ee={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function te(e){let{collapsed:t,...n}=e;return(0,i.jsx)("button",{type:"button",...n,className:(0,u.Z)("clean-btn",ee.tocCollapsibleButton,!t&&ee.tocCollapsibleButtonExpanded,n.className),children:(0,i.jsx)(h.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})})}const ne={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function se(e){let{toc:t,className:n,minHeadingLevel:s,maxHeadingLevel:a}=e;const{collapsed:o,toggleCollapsed:l}=(0,D.u)({initialState:!0});return(0,i.jsxs)("div",{className:(0,u.Z)(ne.tocCollapsible,!o&&ne.tocCollapsibleExpanded,n),children:[(0,i.jsx)(te,{collapsed:o,onClick:l}),(0,i.jsx)(D.z,{lazy:!0,className:ne.tocCollapsibleContent,collapsed:o,children:(0,i.jsx)(K,{toc:t,minHeadingLevel:s,maxHeadingLevel:a})})]})}const ae={tocMobile:"tocMobile_ITEo"};function oe(){const{toc:e,frontMatter:t}=r();return(0,i.jsx)(se,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,u.Z)(v.k.docs.docTocMobile,ae.tocMobile)})}const ie={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"},le="table-of-contents__link toc-highlight",ce="table-of-contents__link--active";function re(e){let{className:t,...n}=e;return(0,i.jsx)("div",{className:(0,u.Z)(ie.tableOfContents,"thin-scrollbar",t),children:(0,i.jsx)(K,{...n,linkClassName:le,linkActiveClassName:ce})})}function de(){const{toc:e,frontMatter:t}=r();return(0,i.jsx)(re,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:v.k.docs.docTocDesktop})}var ue=n(2503),me=n(1151),he=n(5742),pe=n(2389),fe=n(2949);function xe(){const{prism:e}=(0,$.L)(),{colorMode:t}=(0,fe.I)(),n=e.theme,s=e.darkTheme||n;return"dark"===t?s:n}var be=n(7594),ge=n.n(be);const je=/title=(?["'])(?.*?)\1/,ve=/\{(?[\d,-]+)\}/,Ne={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},Ce={...Ne,lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}},ke=Object.keys(Ne);function ye(e,t){const n=e.map((e=>{const{start:n,end:s}=Ce[e];return`(?:${n}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${s})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function Le(e,t){let n=e.replace(/\n$/,"");const{language:s,magicComments:a,metastring:o}=t;if(o&&ve.test(o)){const e=o.match(ve).groups.range;if(0===a.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${o}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=a[0].className,s=ge()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(s),code:n}}if(void 0===s)return{lineClassNames:{},code:n};const i=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return ye(["js","jsBlock"],t);case"jsx":case"tsx":return ye(["js","jsBlock","jsx"],t);case"html":return ye(["js","jsBlock","html"],t);case"python":case"py":case"bash":return ye(["bash"],t);case"markdown":case"md":return ye(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return ye(["tex"],t);case"lua":case"haskell":case"sql":return ye(["lua"],t);case"wasm":return ye(["wasm"],t);case"vb":case"vba":case"visual-basic":return ye(["vb","rem"],t);case"vbnet":return ye(["vbnet","rem"],t);case"batch":return ye(["rem"],t);case"basic":return ye(["rem","f90"],t);case"fsharp":return ye(["js","ml"],t);case"ocaml":case"sml":return ye(["ml"],t);case"fortran":return ye(["f90"],t);case"cobol":return ye(["cobol"],t);default:return ye(ke,t)}}(s,a),l=n.split("\n"),c=Object.fromEntries(a.map((e=>[e.className,{start:0,range:""}]))),r=Object.fromEntries(a.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),d=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),u=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let h=0;hvoid 0!==e));r[t]?c[r[t]].range+=`${h},`:d[t]?c[d[t]].start=h:u[t]&&(c[u[t]].range+=`${c[u[t]].start}-${h-1},`),l.splice(h,1)}n=l.join("\n");const m={};return Object.entries(c).forEach((e=>{let[t,{range:n}]=e;ge()(n).forEach((e=>{m[e]??=[],m[e].push(t)}))})),{lineClassNames:m,code:n}}const Be={codeBlockContainer:"codeBlockContainer_Ckt0"};function _e(e){let{as:t,...n}=e;const s=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[s,a]=e;const o=t[s];o&&"string"==typeof a&&(n[o]=a)})),n}(xe());return(0,i.jsx)(t,{...n,style:s,className:(0,u.Z)(n.className,Be.codeBlockContainer,v.k.common.codeBlock)})}const we={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function Ze(e){let{children:t,className:n}=e;return(0,i.jsx)(_e,{as:"pre",tabIndex:0,className:(0,u.Z)(we.codeBlockStandalone,"thin-scrollbar",n),children:(0,i.jsx)("code",{className:we.codeBlockLines,children:t})})}const Te={attributes:!0,characterData:!0,childList:!0,subtree:!0};function Ee(e,t){const[n,a]=(0,s.useState)(),i=(0,s.useCallback)((()=>{a(e.current?.closest("[role=tabpanel][hidden]"))}),[e,a]);(0,s.useEffect)((()=>{i()}),[i]),function(e,t,n){void 0===n&&(n=Te);const a=(0,o.zX)(t),i=(0,o.Ql)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(a);return e&&t.observe(e,i),()=>t.disconnect()}),[e,a,i])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),i())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var He=n(2573);const Ie={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function Me(e){let{line:t,classNames:n,showLineNumbers:s,getLineProps:a,getTokenProps:o}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const l=a({line:t,className:(0,u.Z)(n,s&&Ie.codeLine)}),c=t.map(((e,t)=>(0,i.jsx)("span",{...o({token:e})},t)));return(0,i.jsxs)("span",{...l,children:[s?(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("span",{className:Ie.codeLineNumber}),(0,i.jsx)("span",{className:Ie.codeLineContent,children:c})]}):c,(0,i.jsx)("br",{})]})}function Ae(e){return(0,i.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,i.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})})}function Se(e){return(0,i.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,i.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const Ue={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function Ve(e){let{code:t,className:n}=e;const[a,o]=(0,s.useState)(!1),l=(0,s.useRef)(void 0),c=(0,s.useCallback)((()=>{!function(e,{target:t=document.body}={}){if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const n=document.createElement("textarea"),s=document.activeElement;n.value=e,n.setAttribute("readonly",""),n.style.contain="strict",n.style.position="absolute",n.style.left="-9999px",n.style.fontSize="12pt";const a=document.getSelection(),o=a.rangeCount>0&&a.getRangeAt(0);t.append(n),n.select(),n.selectionStart=0,n.selectionEnd=e.length;let i=!1;try{i=document.execCommand("copy")}catch{}n.remove(),o&&(a.removeAllRanges(),a.addRange(o)),s&&s.focus()}(t),o(!0),l.current=window.setTimeout((()=>{o(!1)}),1e3)}),[t]);return(0,s.useEffect)((()=>()=>window.clearTimeout(l.current)),[]),(0,i.jsx)("button",{type:"button","aria-label":a?(0,h.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,h.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,h.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,u.Z)("clean-btn",n,Ue.copyButton,a&&Ue.copyButtonCopied),onClick:c,children:(0,i.jsxs)("span",{className:Ue.copyButtonIcons,"aria-hidden":"true",children:[(0,i.jsx)(Ae,{className:Ue.copyButtonIcon}),(0,i.jsx)(Se,{className:Ue.copyButtonSuccessIcon})]})})}function ze(e){return(0,i.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,i.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})})}const Re={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function Pe(e){let{className:t,onClick:n,isEnabled:s}=e;const a=(0,h.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,i.jsx)("button",{type:"button",onClick:n,className:(0,u.Z)("clean-btn",t,s&&Re.wordWrapButtonEnabled),"aria-label":a,title:a,children:(0,i.jsx)(ze,{className:Re.wordWrapButtonIcon,"aria-hidden":"true"})})}function Oe(e){let{children:t,className:n="",metastring:a,title:o,showLineNumbers:l,language:c}=e;const{prism:{defaultLanguage:r,magicComments:d}}=(0,$.L)(),m=function(e){return e?.toLowerCase()}(c??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return t?.replace(/language-/,"")}(n)??r),h=xe(),p=function(){const[e,t]=(0,s.useState)(!1),[n,a]=(0,s.useState)(!1),o=(0,s.useRef)(null),i=(0,s.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),l=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");a(n)}),[o]);return Ee(o,l),(0,s.useEffect)((()=>{l()}),[e,l]),(0,s.useEffect)((()=>(window.addEventListener("resize",l,{passive:!0}),()=>{window.removeEventListener("resize",l)})),[l]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:i}}(),f=function(e){return e?.match(je)?.groups.title??""}(a)||o,{lineClassNames:x,code:b}=Le(t,{metastring:a,language:m,magicComments:d}),g=l??function(e){return Boolean(e?.includes("showLineNumbers"))}(a);return(0,i.jsxs)(_e,{as:"div",className:(0,u.Z)(n,m&&!n.includes(`language-${m}`)&&`language-${m}`),children:[f&&(0,i.jsx)("div",{className:we.codeBlockTitle,children:f}),(0,i.jsxs)("div",{className:we.codeBlockContent,children:[(0,i.jsx)(He.y$,{theme:h,code:b,language:m??"text",children:e=>{let{className:t,style:n,tokens:s,getLineProps:a,getTokenProps:o}=e;return(0,i.jsx)("pre",{tabIndex:0,ref:p.codeBlockRef,className:(0,u.Z)(t,we.codeBlock,"thin-scrollbar"),style:n,children:(0,i.jsx)("code",{className:(0,u.Z)(we.codeBlockLines,g&&we.codeBlockLinesWithNumbering),children:s.map(((e,t)=>(0,i.jsx)(Me,{line:e,getLineProps:a,getTokenProps:o,classNames:x[t],showLineNumbers:g},t)))})})}}),(0,i.jsxs)("div",{className:we.buttonGroup,children:[(p.isEnabled||p.isCodeScrollable)&&(0,i.jsx)(Pe,{className:we.codeButton,onClick:()=>p.toggle(),isEnabled:p.isEnabled}),(0,i.jsx)(Ve,{className:we.codeButton,code:b})]})]})]})}function De(e){let{children:t,...n}=e;const a=(0,pe.Z)(),o=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),l="string"==typeof o?Oe:Ze;return(0,i.jsx)(l,{...n,children:o},String(a))}function $e(e){return(0,i.jsx)("code",{...e})}var We=n(8138);const Fe={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function qe(e){return!!e&&("SUMMARY"===e.tagName||qe(e.parentElement))}function Ge(e,t){return!!e&&(e===t||Ge(e.parentElement,t))}function Je(e){let{summary:t,children:n,...a}=e;(0,We.Z)().collectAnchor(a.id);const o=(0,pe.Z)(),l=(0,s.useRef)(null),{collapsed:c,setCollapsed:r}=(0,D.u)({initialState:!a.open}),[d,m]=(0,s.useState)(a.open),h=s.isValidElement(t)?t:(0,i.jsx)("summary",{children:t??"Details"});return(0,i.jsxs)("details",{...a,ref:l,open:d,"data-collapsed":c,className:(0,u.Z)(Fe.details,o&&Fe.isBrowser,a.className),onMouseDown:e=>{qe(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;qe(t)&&Ge(t,l.current)&&(e.preventDefault(),c?(r(!1),m(!0)):r(!0))},children:[h,(0,i.jsx)(D.z,{lazy:!1,collapsed:c,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{r(e),m(!e)},children:(0,i.jsx)("div",{className:Fe.collapsibleContent,children:n})})]})}const Ye={details:"details_b_Ee"},Qe="alert alert--info";function Xe(e){let{...t}=e;return(0,i.jsx)(Je,{...t,className:(0,u.Z)(Qe,Ye.details,t.className)})}function Ke(e){const t=s.Children.toArray(e.children),n=t.find((e=>s.isValidElement(e)&&"summary"===e.type)),a=(0,i.jsx)(i.Fragment,{children:t.filter((e=>e!==n))});return(0,i.jsx)(Xe,{...e,summary:n,children:a})}function et(e){return(0,i.jsx)(ue.Z,{...e})}const tt={containsTaskList:"containsTaskList_mC6p"};function nt(e){if(void 0!==e)return(0,u.Z)(e,e?.includes("contains-task-list")&&tt.containsTaskList)}const st={img:"img_ev3q"};function at(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=s.Children.toArray(e),n=t.find((e=>s.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),a=t.filter((e=>e!==n)),o=n?.props.children;return{mdxAdmonitionTitle:o,rest:a.length>0?(0,i.jsx)(i.Fragment,{children:a}):null}}(e.children),a=e.title??t;return{...e,...a&&{title:a},children:n}}const ot={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function it(e){let{type:t,className:n,children:s}=e;return(0,i.jsx)("div",{className:(0,u.Z)(v.k.common.admonition,v.k.common.admonitionType(t),ot.admonition,n),children:s})}function lt(e){let{icon:t,title:n}=e;return(0,i.jsxs)("div",{className:ot.admonitionHeading,children:[(0,i.jsx)("span",{className:ot.admonitionIcon,children:t}),n]})}function ct(e){let{children:t}=e;return t?(0,i.jsx)("div",{className:ot.admonitionContent,children:t}):null}function rt(e){const{type:t,icon:n,title:s,children:a,className:o}=e;return(0,i.jsxs)(it,{type:t,className:o,children:[s||n?(0,i.jsx)(lt,{title:s,icon:n}):null,(0,i.jsx)(ct,{children:a})]})}function dt(e){return(0,i.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,i.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})}const ut={icon:(0,i.jsx)(dt,{}),title:(0,i.jsx)(h.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function mt(e){return(0,i.jsx)(rt,{...ut,...e,className:(0,u.Z)("alert alert--secondary",e.className),children:e.children})}function ht(e){return(0,i.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,i.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})}const pt={icon:(0,i.jsx)(ht,{}),title:(0,i.jsx)(h.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function ft(e){return(0,i.jsx)(rt,{...pt,...e,className:(0,u.Z)("alert alert--success",e.className),children:e.children})}function xt(e){return(0,i.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,i.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})}const bt={icon:(0,i.jsx)(xt,{}),title:(0,i.jsx)(h.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function gt(e){return(0,i.jsx)(rt,{...bt,...e,className:(0,u.Z)("alert alert--info",e.className),children:e.children})}function jt(e){return(0,i.jsx)("svg",{viewBox:"0 0 16 16",...e,children:(0,i.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}const vt={icon:(0,i.jsx)(jt,{}),title:(0,i.jsx)(h.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function Nt(e){return(0,i.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,i.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})}const Ct={icon:(0,i.jsx)(Nt,{}),title:(0,i.jsx)(h.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const kt={icon:(0,i.jsx)(jt,{}),title:(0,i.jsx)(h.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const yt={...{note:mt,tip:ft,info:gt,warning:function(e){return(0,i.jsx)(rt,{...vt,...e,className:(0,u.Z)("alert alert--warning",e.className),children:e.children})},danger:function(e){return(0,i.jsx)(rt,{...Ct,...e,className:(0,u.Z)("alert alert--danger",e.className),children:e.children})}},...{secondary:e=>(0,i.jsx)(mt,{title:"secondary",...e}),important:e=>(0,i.jsx)(gt,{title:"important",...e}),success:e=>(0,i.jsx)(ft,{title:"success",...e}),caution:function(e){return(0,i.jsx)(rt,{...kt,...e,className:(0,u.Z)("alert alert--warning",e.className),children:e.children})}}};function Lt(e){const t=at(e),n=(s=t.type,yt[s]||(console.warn(`No admonition component found for admonition type "${s}". Using Info as fallback.`),yt.info));var s;return(0,i.jsx)(n,{...t})}var Bt=n(1875);const _t={Head:he.Z,details:Ke,Details:Ke,code:function(e){return function(e){return void 0!==e.children&&s.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")))}(e)?(0,i.jsx)($e,{...e}):(0,i.jsx)(De,{...e})},a:function(e){return(0,i.jsx)(p.Z,{...e})},pre:function(e){return(0,i.jsx)(i.Fragment,{children:e.children})},ul:function(e){return(0,i.jsx)("ul",{...e,className:nt(e.className)})},li:function(e){return(0,We.Z)().collectAnchor(e.id),(0,i.jsx)("li",{...e})},img:function(e){return(0,i.jsx)("img",{decoding:"async",loading:"lazy",...e,className:(t=e.className,(0,u.Z)(t,st.img))});var t},h1:e=>(0,i.jsx)(et,{as:"h1",...e}),h2:e=>(0,i.jsx)(et,{as:"h2",...e}),h3:e=>(0,i.jsx)(et,{as:"h3",...e}),h4:e=>(0,i.jsx)(et,{as:"h4",...e}),h5:e=>(0,i.jsx)(et,{as:"h5",...e}),h6:e=>(0,i.jsx)(et,{as:"h6",...e}),admonition:Lt,mermaid:Bt.Z};function wt(e){let{children:t}=e;return(0,i.jsx)(me.Z,{components:_t,children:t})}function Zt(e){let{children:t}=e;const n=function(){const{metadata:e,frontMatter:t,contentTitle:n}=r();return t.hide_title||void 0!==n?null:e.title}();return(0,i.jsxs)("div",{className:(0,u.Z)(v.k.docs.docMarkdown,"markdown"),children:[n&&(0,i.jsx)("header",{children:(0,i.jsx)(ue.Z,{as:"h1",children:n})}),(0,i.jsx)(wt,{children:t})]})}var Tt=n(6565),Et=n(8596),Ht=n(4996);function It(e){return(0,i.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,i.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const Mt={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function At(){const e=(0,Ht.ZP)("/");return(0,i.jsx)("li",{className:"breadcrumbs__item",children:(0,i.jsx)(p.Z,{"aria-label":(0,h.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,i.jsx)(It,{className:Mt.breadcrumbHomeIcon})})})}const St={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function Ut(e){let{children:t,href:n,isLast:s}=e;const a="breadcrumbs__link";return s?(0,i.jsx)("span",{className:a,itemProp:"name",children:t}):n?(0,i.jsx)(p.Z,{className:a,href:n,itemProp:"item",children:(0,i.jsx)("span",{itemProp:"name",children:t})}):(0,i.jsx)("span",{className:a,children:t})}function Vt(e){let{children:t,active:n,index:s,addMicrodata:a}=e;return(0,i.jsxs)("li",{...a&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,u.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n}),children:[t,(0,i.jsx)("meta",{itemProp:"position",content:String(s+1)})]})}function zt(){const e=(0,Tt.s1)(),t=(0,Et.Ns)();return e?(0,i.jsx)("nav",{className:(0,u.Z)(v.k.docs.docBreadcrumbs,St.breadcrumbsContainer),"aria-label":(0,h.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,i.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[t&&(0,i.jsx)(At,{}),e.map(((t,n)=>{const s=n===e.length-1,a="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,i.jsx)(Vt,{active:s,index:n,addMicrodata:!!a,children:(0,i.jsx)(Ut,{href:a,isLast:s,children:t.label})},n)}))]})}):null}function Rt(){return(0,i.jsx)(h.Z,{id:"theme.contentVisibility.unlistedBanner.title",description:"The unlisted content banner title",children:"Unlisted page"})}function Pt(){return(0,i.jsx)(h.Z,{id:"theme.contentVisibility.unlistedBanner.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function Ot(){return(0,i.jsx)(he.Z,{children:(0,i.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}function Dt(){return(0,i.jsx)(h.Z,{id:"theme.contentVisibility.draftBanner.title",description:"The draft content banner title",children:"Draft page"})}function $t(){return(0,i.jsx)(h.Z,{id:"theme.contentVisibility.draftBanner.message",description:"The draft content banner message",children:"This page is a draft. It will only be visible in dev and be excluded from the production build."})}function Wt(e){let{className:t}=e;return(0,i.jsx)(Lt,{type:"caution",title:(0,i.jsx)(Dt,{}),className:(0,u.Z)(t,v.k.common.draftBanner),children:(0,i.jsx)($t,{})})}function Ft(e){let{className:t}=e;return(0,i.jsx)(Lt,{type:"caution",title:(0,i.jsx)(Rt,{}),className:(0,u.Z)(t,v.k.common.unlistedBanner),children:(0,i.jsx)(Pt,{})})}function qt(e){return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(Ot,{}),(0,i.jsx)(Ft,{...e})]})}function Gt(e){let{metadata:t}=e;const{unlisted:n,frontMatter:s}=t;return(0,i.jsxs)(i.Fragment,{children:[(n||s.unlisted)&&(0,i.jsx)(qt,{}),s.draft&&(0,i.jsx)(Wt,{})]})}const Jt={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function Yt(e){let{children:t}=e;const n=function(){const{frontMatter:e,toc:t}=r(),n=(0,m.i)(),s=e.hide_table_of_contents,a=!s&&t.length>0;return{hidden:s,mobile:a?(0,i.jsx)(oe,{}):void 0,desktop:!a||"desktop"!==n&&"ssr"!==n?void 0:(0,i.jsx)(de,{})}}(),{metadata:s}=r();return(0,i.jsxs)("div",{className:"row",children:[(0,i.jsxs)("div",{className:(0,u.Z)("col",!n.hidden&&Jt.docItemCol),children:[(0,i.jsx)(Gt,{metadata:s}),(0,i.jsx)(_,{}),(0,i.jsxs)("div",{className:Jt.docItemContainer,children:[(0,i.jsxs)("article",{children:[(0,i.jsx)(zt,{}),(0,i.jsx)(w,{}),n.mobile,(0,i.jsx)(Zt,{children:t}),(0,i.jsx)(O,{})]}),(0,i.jsx)(b,{})]})]}),n.desktop&&(0,i.jsx)("div",{className:"col col--3",children:n.desktop})]})}function Qt(e){const t=`docs-doc-id-${e.content.metadata.id}`,n=e.content;return(0,i.jsx)(c,{content:e.content,children:(0,i.jsxs)(a.FG,{className:t,children:[(0,i.jsx)(d,{}),(0,i.jsx)(Yt,{children:(0,i.jsx)(n,{})})]})})}},7594:(e,t)=>{function n(e){let t,n=[];for(let s of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(s))n.push(parseInt(s,10));else if(t=s.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,s,a,o]=t;if(s&&o){s=parseInt(s),o=parseInt(o);const e=s{"use strict";n.d(t,{Z:()=>l,a:()=>i});var s=n(7294);const a={},o=s.createContext(a);function i(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/build/assets/js/22dd74f7.f15d240d.js b/build/assets/js/22dd74f7.f15d240d.js
new file mode 100644
index 0000000..da44e0e
--- /dev/null
+++ b/build/assets/js/22dd74f7.f15d240d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkgsmm=self.webpackChunkgsmm||[]).push([[980],{5904:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"Home","href":"/","docId":"index","unlisted":false},{"type":"link","label":"Maturity Matrix?","href":"/history","docId":"history","unlisted":false},{"type":"category","label":"Green Maturity Matrix","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Level 1","href":"/gsmm/level-1","docId":"gsmm/level-1","unlisted":false},{"type":"link","label":"Level 2","href":"/gsmm/level-2","docId":"gsmm/level-2","unlisted":false},{"type":"link","label":"Level 3","href":"/gsmm/level-3","docId":"gsmm/level-3","unlisted":false},{"type":"link","label":"Level 4","href":"/gsmm/level-4","docId":"gsmm/level-4","unlisted":false},{"type":"link","label":"Level 5","href":"/gsmm/level-5","docId":"gsmm/level-5","unlisted":false}],"href":"/gsmm/"},{"type":"link","label":"Solutions","href":"/solutions","docId":"solutions","unlisted":false}]},"docs":{"gsmm/index":{"id":"gsmm/index","title":"Levels of the Matrix","description":"TBC","sidebar":"tutorialSidebar"},"gsmm/level-1":{"id":"gsmm/level-1","title":"Level 1 - Aspiring","description":"Maturity Matrix - Level 1 - Aspiring","sidebar":"tutorialSidebar"},"gsmm/level-2":{"id":"gsmm/level-2","title":"Level 2 - Aware","description":"Maturity Matrix - Level 2 - Aware","sidebar":"tutorialSidebar"},"gsmm/level-3":{"id":"gsmm/level-3","title":"Level 3 - Acting","description":"Maturity Matrix - Level 3 Acting","sidebar":"tutorialSidebar"},"gsmm/level-4":{"id":"gsmm/level-4","title":"Level 4 - Awesome","description":"Maturity Matrix - Level 4 - Awesome","sidebar":"tutorialSidebar"},"gsmm/level-5":{"id":"gsmm/level-5","title":"Level 5 - Inspiring","description":"Maturity Matrix - Level 5 - Inspiring","sidebar":"tutorialSidebar"},"history":{"id":"history","title":"What is a Maturity Matrix?","description":"Maturity matrices are used in fields like project management and cybersecurity to help organizations grok where they currently stand in terms of best practices","sidebar":"tutorialSidebar"},"index":{"id":"index","title":"Green Software Maturity Matrix","description":"The Green Software Maturity Matrix is a self-assessment tool. It helps organisations understand the extent to which they have implemented green principles, patterns, and processes for building and operating their software systems.","sidebar":"tutorialSidebar"},"solutions":{"id":"solutions","title":"Solutions","description":"TBC","sidebar":"tutorialSidebar"}}}}')}}]);
\ No newline at end of file
diff --git a/build/assets/js/2930bd34.8e791dd8.js b/build/assets/js/2930bd34.8e791dd8.js
new file mode 100644
index 0000000..b1bdd09
--- /dev/null
+++ b/build/assets/js/2930bd34.8e791dd8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkgsmm=self.webpackChunkgsmm||[]).push([[497],{3827:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var i=t(5893),n=t(1151);const s={description:"Maturity Matrix - Level 5 - Inspiring",sidebar_position:8,sidebar_label:"Level 5"},a="Level 5 - Inspiring",o={id:"gsmm/level-5",title:"Level 5 - Inspiring",description:"Maturity Matrix - Level 5 - Inspiring",source:"@site/docs/gsmm/level-5.md",sourceDirName:"gsmm",slug:"/gsmm/level-5",permalink:"/gsmm/level-5",draft:!1,unlisted:!1,editUrl:"https://github.com/Green-Software-Foundation/green-software-maturity-matrix/edit/dev/docs/gsmm/level-5.md",tags:[],version:"current",sidebarPosition:8,frontMatter:{description:"Maturity Matrix - Level 5 - Inspiring",sidebar_position:8,sidebar_label:"Level 5"},sidebar:"tutorialSidebar",previous:{title:"Level 4",permalink:"/gsmm/level-4"},next:{title:"Solutions",permalink:"/solutions"}},d={},l=[];function c(e){const r={a:"a",h1:"h1",header:"header",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(r.header,{children:(0,i.jsx)(r.h1,{id:"level-5---inspiring",children:"Level 5 - Inspiring"})}),"\n",(0,i.jsxs)(r.p,{children:["You\u2019ve got there. You have achieved 24/7 CFE and require no more than 1% offsets to handle hard to shift embodied carbon. You have team level measurable goals (OKRs etc) for your CO2 measurements. You are optimizing for minimal CO2 emissions using your dynamic, real-time data. You and the services you rely on use real-time information including dynamic grid energy data to make rapid, quantitative decisions that allow you to be greener. This could (and probably will) be via a service you use rather than something you built yourself. You are already an SRE-aware organization that thinks in terms of ",(0,i.jsx)(r.a,{href:"https://cloud.google.com/blog/products/management-tools/sre-error-budgets-and-maintenance-windows",children:"error budgets"})," for outages and downtime and you now think about carbon budgets in the same way. Using predictions based on factors such as weather and grid congestion, you change and move almost all of your workloads ahead of time to match your electricity requirements to local green power availability (aka 24/7 CFE) and any time sensitive workloads are highly optimized for minimal electricity use. You never cause hardware to become end of life either by lack of security patches or lack of backwards compatibility. You are ready for the energy transition and won\u2019t be caught by surprise by sudden new rules or constraints."]}),"\n",(0,i.jsxs)(r.table,{children:[(0,i.jsx)(r.thead,{children:(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.th,{children:"Axis"}),(0,i.jsx)(r.th,{children:"State"})]})}),(0,i.jsxs)(r.tbody,{children:[(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.td,{children:"Whole organization energy commitments"}),(0,i.jsx)(r.td,{children:"already 24/7 CFE with no more than 1% offsets, monitored by a tight carbon error budget"})]}),(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.td,{children:"Carbon footprint"}),(0,i.jsx)(r.td,{children:"it is as close to zero as achievable"})]}),(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.td,{children:"CO2 equivalent metrics"}),(0,i.jsx)(r.td,{children:"Real time through easy standardized APIs together with projections"})]}),(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.td,{children:"Server resource management"}),(0,i.jsx)(r.td,{children:"you have a rigorous carbon error budget including your scope 3 embodied carbon and all your resource use is tracked and managed through it"})]}),(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.td,{children:"Energy resource management"}),(0,i.jsx)(r.td,{children:"you run 24/7 CFE with a rigorous carbon error budget"})]}),(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.td,{children:"Minimize end user device embodied carbon waste (assume circular economy)"}),(0,i.jsxs)(r.td,{children:["automated processes ensure backwards compatibility and security patches for all devices (software never kills a working device). Devices last forever al la ",(0,i.jsx)(r.a,{href:"https://yandoo.wordpress.com/2013/08/17/theseuss-paradox/",children:"Theseus\u2019 ship"}),"/George Washington\u2019s axe/Trigger\u2019s broom"]})]}),(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.td,{children:"Minimize server hardware embodied carbon waste"}),(0,i.jsx)(r.td,{children:"hardware use is minimized by using full grid-aware integration with end user devices including phones, laptops, smart clothing, fridges\u2026"})]}),(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.td,{children:"Product management"}),(0,i.jsx)(r.td,{children:"your features are tracked against your scope 1/2/3 carbon error budget"})]}),(0,i.jsxs)(r.tr,{children:[(0,i.jsx)(r.td,{children:"Education"}),(0,i.jsx)(r.td,{children:"you train others in what you have achieved"})]})]})]})]})}function h(e={}){const{wrapper:r}={...(0,n.a)(),...e.components};return r?(0,i.jsx)(r,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1151:(e,r,t)=>{t.d(r,{Z:()=>o,a:()=>a});var i=t(7294);const n={},s=i.createContext(n);function a(e){const r=i.useContext(s);return i.useMemo((function(){return"function"==typeof e?e(r):{...r,...e}}),[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),i.createElement(s.Provider,{value:r},e.children)}}}]);
\ No newline at end of file
diff --git a/build/assets/js/30ac88d3.edc6fbdc.js b/build/assets/js/30ac88d3.edc6fbdc.js
new file mode 100644
index 0000000..c9f66c5
--- /dev/null
+++ b/build/assets/js/30ac88d3.edc6fbdc.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkgsmm=self.webpackChunkgsmm||[]).push([[527],{3575:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>a,default:()=>m,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var r=n(5893),i=n(1151);const s={description:"Maturity Matrix - Level 3 Acting",sidebar_position:6,sidebar_label:"Level 3"},a="Level 3 - Acting",o={id:"gsmm/level-3",title:"Level 3 - Acting",description:"Maturity Matrix - Level 3 Acting",source:"@site/docs/gsmm/level-3.md",sourceDirName:"gsmm",slug:"/gsmm/level-3",permalink:"/gsmm/level-3",draft:!1,unlisted:!1,editUrl:"https://github.com/Green-Software-Foundation/green-software-maturity-matrix/edit/dev/docs/gsmm/level-3.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{description:"Maturity Matrix - Level 3 Acting",sidebar_position:6,sidebar_label:"Level 3"},sidebar:"tutorialSidebar",previous:{title:"Level 2",permalink:"/gsmm/level-2"},next:{title:"Level 4",permalink:"/gsmm/level-4"}},d={},l=[];function c(e){const t={h1:"h1",header:"header",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.header,{children:(0,r.jsx)(t.h1,{id:"level-3---acting",children:"Level 3 - Acting"})}),"\n",(0,r.jsx)(t.p,{children:"You know your scope 1, 2 and 3 emissions on a daily, weekly, monthly or annual basis. You have been acting on reducing the scope 1 and 2 emissions for a while and your carbon footprint is going down per some consistent, org-specific unit of output, e.g per order. You have defined processes for every team including regular reporting and reviewing of CO2 equivalent emissions for all IT related operations. Your PM teams have a remit to avoid waste, for example saving no more data than is necessary or implementing any functionality before need, and you can switch off zombie or low use services immediately (\u201cLightswitch Ops\u201d). You have automatic resilience to weather-related operational risks (e.g. DC outages). You are aware of and discuss the tradeoffs between embodied carbon and carbon generated by energy usage. You have plans in place to minimize your embodied carbon footprint, including significantly extending the life expectancy of both the servers and end user devices you run on."}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Axis"}),(0,r.jsx)(t.th,{children:"State"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Whole organization energy commitments"}),(0,r.jsx)(t.td,{children:"already net CZero with offsets"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Carbon footprint"}),(0,r.jsx)(t.td,{children:"you know what it is (scope 1, 2 and 3) and it is reducing per unit of output, e.g. orders"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"CO2 equivalent metrics"}),(0,r.jsx)(t.td,{children:"daily numbers from all suppliers and own systems for scope 1/2/3 and embodied carbon"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Server resource management"}),(0,r.jsx)(t.td,{children:"all systems can be safely switched off (aka Lightswitch Ops) and there are processes for doing so. You have knowledge of what is running on all your machines and there are no zombie services. You save no unnecessary data and it is maintained in the optimal medium (e.g. tape if the data is not required for real time queries)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Energy resource management"}),(0,r.jsx)(t.td,{children:"at least part of your systems are dynamically managed based on green electricity availability (either via direct orchestration or through a cloud service)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Minimize end user device embodied carbon waste (assume circular economy)"}),(0,r.jsx)(t.td,{children:"defined processes in place that ensure ten year old hardware is supported by your software for most commonly used devices (90%+)"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Minimize server hardware embodied carbon waste"}),(0,r.jsx)(t.td,{children:"defined utilization targets. All systems use some form of multi-tenancy. Servers all have a 5 year life expectancy"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Product management"}),(0,r.jsx)(t.td,{children:"all new product design supports demand shifting/shaping and Lean concepts are followed. End user devices prompt for green/off peak charging. No more data is saved than necessary"})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:"Education"}),(0,r.jsx)(t.td,{children:"advanced training for all engineers & PMs"})]})]})]})]})}function m(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>a});var r=n(7294);const i={},s=r.createContext(i);function a(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/build/assets/js/5764eac9.87024765.js b/build/assets/js/5764eac9.87024765.js
new file mode 100644
index 0000000..193244d
--- /dev/null
+++ b/build/assets/js/5764eac9.87024765.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkgsmm=self.webpackChunkgsmm||[]).push([[510],{4486:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>n,metadata:()=>o,toc:()=>l});var a=r(5893),s=r(1151);const n={description:"Maturity Matrix - Level 4 - Awesome",sidebar_position:7,sidebar_label:"Level 4"},i="Level 4 - Awesome",o={id:"gsmm/level-4",title:"Level 4 - Awesome",description:"Maturity Matrix - Level 4 - Awesome",source:"@site/docs/gsmm/level-4.md",sourceDirName:"gsmm",slug:"/gsmm/level-4",permalink:"/gsmm/level-4",draft:!1,unlisted:!1,editUrl:"https://github.com/Green-Software-Foundation/green-software-maturity-matrix/edit/dev/docs/gsmm/level-4.md",tags:[],version:"current",sidebarPosition:7,frontMatter:{description:"Maturity Matrix - Level 4 - Awesome",sidebar_position:7,sidebar_label:"Level 4"},sidebar:"tutorialSidebar",previous:{title:"Level 3",permalink:"/gsmm/level-3"},next:{title:"Level 5",permalink:"/gsmm/level-5"}},d={},l=[];function c(e){const t={h1:"h1",header:"header",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.header,{children:(0,a.jsx)(t.h1,{id:"level-4---awesome",children:"Level 4 - Awesome"})}),"\n",(0,a.jsx)(t.p,{children:"You have a measurement system in place that is producing good real-time scope 1, 2, and 3 data and although it\u2019s not currently driving the business day-to-day, the business is very aware of it. Using the more limited scope 1, 2, and 3 data you have had for a while, you have already achieved net carbon zero using no more than 10% offsets. (Note offsets are highly problematic but they demonstrate you are regularly measuring). You perform demand shaping; pre-calculation and caching; and time and location shifting, for example, to adapt your workloads to current conditions. You automatically delete or archive data that isn\u2019t in regular use. Services no longer in use are automatically turned off and rightsizing happens automatically (i.e. you apply SRE principles). Your applications are Lean and you constantly review and retire functionality that is insufficiently used. Your organizational strategy has been aligned with being green as a business goal - perhaps for reasons of ESG, cost, resilience, or market access to the EU - and delivery on CO2 targets is regularly discussed and reported at senior level. Your total carbon footprint is going down even as you grow. You are also actively driving the carbon footprint of your suppliers to go down. You never cause hardware less than ten years old to become end of life either by lack of security patches or lack of backwards compatibility in your applications. You are actively driving the carbon footprint of your customers to go down (beyond simply their use of your services and devices) for example by providing scope 3 reporting for your goods and services. Examples (for some of it): Google, AWS, MS."}),"\n",(0,a.jsxs)(t.table,{children:[(0,a.jsx)(t.thead,{children:(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.th,{children:"Axis"}),(0,a.jsx)(t.th,{children:"State"})]})}),(0,a.jsxs)(t.tbody,{children:[(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"Whole organization energy commitments"}),(0,a.jsx)(t.td,{children:"already net CZero with no more than 10% offsets"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"Carbon footprint"}),(0,a.jsx)(t.td,{children:"it is reducing full stop and so is that of your suppliers"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"CO2 equivalent metrics"}),(0,a.jsx)(t.td,{children:"Real time through easy standardized APIs together with projections"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"Server resource management"}),(0,a.jsx)(t.td,{children:"all turning off and rightsizing happens automatically and data that is not regularly accessed is automatically deleted or archived"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"Energy resource management"}),(0,a.jsx)(t.td,{children:"all your systems support demand shifting and shaping based on energy data"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"Minimize end user device embodied carbon waste (assume circular economy)"}),(0,a.jsx)(t.td,{children:"automated processes ensure ten year old hardware is supported by your software for all devices"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"Minimize server hardware embodied carbon waste"}),(0,a.jsx)(t.td,{children:"optimal utilization achieved for every server using automated orchestration. Servers all have a 10 year life expectancy"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"Product management"}),(0,a.jsx)(t.td,{children:"carbon emissions are tracked per feature. Feature use is monitored and low use/poor carbon ROI features retired"})]}),(0,a.jsxs)(t.tr,{children:[(0,a.jsx)(t.td,{children:"Education"}),(0,a.jsx)(t.td,{children:"only basic training needed - everything is green by default"})]})]})]})]})}function u(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},1151:(e,t,r)=>{r.d(t,{Z:()=>o,a:()=>i});var a=r(7294);const s={},n=a.createContext(s);function i(e){const t=a.useContext(n);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),a.createElement(n.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/build/assets/js/5e95c892.75ea5778.js b/build/assets/js/5e95c892.75ea5778.js
new file mode 100644
index 0000000..0358d0d
--- /dev/null
+++ b/build/assets/js/5e95c892.75ea5778.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkgsmm=self.webpackChunkgsmm||[]).push([[661],{1892:(e,s,r)=>{r.r(s),r.d(s,{default:()=>d});r(7294);var u=r(512),a=r(1944),c=r(5281),n=r(8790),t=r(6040),l=r(5893);function d(e){return(0,l.jsx)(a.FG,{className:(0,u.Z)(c.k.wrapper.docsPages),children:(0,l.jsx)(t.Z,{children:(0,n.H)(e.route.routes)})})}}}]);
\ No newline at end of file
diff --git a/build/assets/js/772.de74ac5d.js b/build/assets/js/772.de74ac5d.js
new file mode 100644
index 0000000..657b9c2
--- /dev/null
+++ b/build/assets/js/772.de74ac5d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkgsmm=self.webpackChunkgsmm||[]).push([[772],{5658:(e,t,n)=>{n.d(t,{Z:()=>a});n(7294);var i=n(512),s=n(5999),o=n(2503),r=n(5893);function a(e){let{className:t}=e;return(0,r.jsx)("main",{className:(0,i.Z)("container margin-vert--xl",t),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(o.Z,{as:"h1",className:"hero__title",children:(0,r.jsx)(s.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,r.jsx)("p",{children:(0,r.jsx)(s.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},1772:(e,t,n)=>{n.r(t),n.d(t,{default:()=>l});n(7294);var i=n(5999),s=n(1944),o=n(6040),r=n(5658),a=n(5893);function l(){const e=(0,i.I)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.d,{title:e}),(0,a.jsx)(o.Z,{children:(0,a.jsx)(r.Z,{})})]})}}}]);
\ No newline at end of file
diff --git a/build/assets/js/7a05b6c5.fff8f656.js b/build/assets/js/7a05b6c5.fff8f656.js
new file mode 100644
index 0000000..05020a4
--- /dev/null
+++ b/build/assets/js/7a05b6c5.fff8f656.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkgsmm=self.webpackChunkgsmm||[]).push([[209],{2777:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>t,metadata:()=>s,toc:()=>d});var a=n(5893),r=n(1151);const t={title:"Levels of the Matrix",description:"TBC",sidebar_position:3,sidebar_label:"Green Maturity Matrix"},o="A Green Software Maturity Matrix",s={id:"gsmm/index",title:"Levels of the Matrix",description:"TBC",source:"@site/docs/gsmm/index.md",sourceDirName:"gsmm",slug:"/gsmm/",permalink:"/gsmm/",draft:!1,unlisted:!1,editUrl:"https://github.com/Green-Software-Foundation/green-software-maturity-matrix/edit/dev/docs/gsmm/index.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{title:"Levels of the Matrix",description:"TBC",sidebar_position:3,sidebar_label:"Green Maturity Matrix"},sidebar:"tutorialSidebar",previous:{title:"Maturity Matrix?",permalink:"/history"},next:{title:"Level 1",permalink:"/gsmm/level-1"}},l={},d=[{value:"Level 1 - Aspiring",id:"level-1---aspiring",level:2},{value:"Level 2 - Aware",id:"level-2---aware",level:2},{value:"Level 3 - Acting",id:"level-3---acting",level:2},{value:"Level 4 - Awesome",id:"level-4---awesome",level:2},{value:"Level 5 - Inspiring",id:"level-5---inspiring",level:2},{value:"Axes (Matrix Rows)",id:"axes-matrix-rows",level:2},{value:"Scope",id:"scope",level:2}];function c(e){const i={a:"a",h1:"h1",h2:"h2",header:"header",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.header,{children:(0,a.jsx)(i.h1,{id:"a-green-software-maturity-matrix",children:"A Green Software Maturity Matrix"})}),"\n",(0,a.jsx)(i.p,{children:"What does this mean in a green software context for an organization? Let\u2019s be realistic. Almost all enterprises are at level 1 right now. Going green is the most difficult project our industry faces."}),"\n",(0,a.jsx)(i.p,{children:(0,a.jsx)(i.a,{target:"_blank","data-noBrokenLinkCheck":!0,href:n(9561).Z+"",children:(0,a.jsx)(i.img,{alt:"Green Software Maturity Matrix!",src:n(7884).Z+"",title:"Green Software Maturity Matrix",width:"960",height:"540"})})}),"\n",(0,a.jsx)(i.h2,{id:"level-1---aspiring",children:"Level 1 - Aspiring"}),"\n",(0,a.jsx)(i.p,{children:"You have individuals in your organization who care about green targets for technology but no systemic interest, processes or commitments. Some development teams measure their carbon emissions. This is where almost all of us are today."}),"\n",(0,a.jsx)(i.h2,{id:"level-2---aware",children:"Level 2 - Aware"}),"\n",(0,a.jsx)(i.p,{children:"You know your organization\u2019s scope 1 and 2 emissions. You have a few projects driving greenness within your organization and beyond it using this data (by putting pressure on suppliers, for example). Your engineers have had some training in green systems, operations and patterns."}),"\n",(0,a.jsx)(i.h2,{id:"level-3---acting",children:"Level 3 - Acting"}),"\n",(0,a.jsx)(i.p,{children:"You know your scope 1, 2 and 3 emissions on a daily, weekly, monthly or annual basis. You have been acting on reducing the scope 1 and 2 emissions for a while and your carbon footprint is going down per some consistent, org-specific unit of output, e.g per order. You have defined processes for every team including regular reporting and reviewing of CO2 equivalent emissions for all IT related operations. Your PM teams have a remit to avoid waste, for example saving no more data than is necessary or implementing any functionality before need, and you can switch off zombie or low use services immediately (\u201cLightswitch Ops\u201d). You have automatic resilience to weather-related operational risks (e.g. DC outages). You are aware of and discuss the tradeoffs between embodied carbon and carbon generated by energy usage. You have plans in place to minimize your embodied carbon footprint, including significantly extending the life expectancy of both the servers and end user devices you run on."}),"\n",(0,a.jsx)(i.h2,{id:"level-4---awesome",children:"Level 4 - Awesome"}),"\n",(0,a.jsx)(i.p,{children:"You have a measurement system in place that is producing good real-time scope 1, 2, and 3 data and although it\u2019s not currently driving the business day-to-day, the business is very aware of it. Using the more limited scope 1, 2, and 3 data you have had for a while, you have already achieved net carbon zero using no more than 10% offsets. (Note offsets are highly problematic but they demonstrate you are regularly measuring). You perform demand shaping; pre-calculation and caching; and time and location shifting, for example, to adapt your workloads to current conditions. You automatically delete or archive data that isn\u2019t in regular use. Services no longer in use are automatically turned off and rightsizing happens automatically (i.e. you apply SRE principles). Your applications are Lean and you constantly review and retire functionality that is insufficiently used. Your organizational strategy has been aligned with being green as a business goal - perhaps for reasons of ESG, cost, resilience, or market access to the EU - and delivery on CO2 targets is regularly discussed and reported at senior level. Your total carbon footprint is going down even as you grow. You are also actively driving the carbon footprint of your suppliers to go down. You never cause hardware less than ten years old to become end of life either by lack of security patches or lack of backwards compatibility in your applications. You are actively driving the carbon footprint of your customers to go down (beyond simply their use of your services and devices) for example by providing scope 3 reporting for your goods and services. Examples (for some of it): Google, AWS, MS."}),"\n",(0,a.jsx)(i.h2,{id:"level-5---inspiring",children:"Level 5 - Inspiring"}),"\n",(0,a.jsxs)(i.p,{children:["You\u2019ve got there. You have achieved 24/7 CFE and require no more than 1% offsets to handle hard to shift embodied carbon. You have team level measurable goals (OKRs etc) for your CO2 measurements. You are optimizing for minimal CO2 emissions using your dynamic, real-time data. You and the services you rely on use real-time information including dynamic grid energy data to make rapid, quantitative decisions that allow you to be greener. This could (and probably will) be via a service you use rather than something you built yourself. You are already an SRE-aware organization that thinks in terms of ",(0,a.jsx)(i.a,{href:"https://cloud.google.com/blog/products/management-tools/sre-error-budgets-and-maintenance-windows",children:"error budgets"})," for outages and downtime and you now think about carbon budgets in the same way. Using predictions based on factors such as weather and grid congestion, you change and move almost all of your workloads ahead of time to match your electricity requirements to local green power availability (aka 24/7 CFE) and any time sensitive workloads are highly optimized for minimal electricity use. You never cause hardware to become end of life either by lack of security patches or lack of backwards compatibility. You are ready for the energy transition and won\u2019t be caught by surprise by sudden new rules or constraints."]}),"\n",(0,a.jsx)("hr",{}),"\n",(0,a.jsx)(i.h2,{id:"axes-matrix-rows",children:"Axes (Matrix Rows)"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsx)(i.li,{children:"Whole organization energy commitments"}),"\n",(0,a.jsx)(i.li,{children:"Carbon footprint"}),"\n",(0,a.jsx)(i.li,{children:"CO2 equivalent metrics"}),"\n",(0,a.jsx)(i.li,{children:"Server resource management"}),"\n",(0,a.jsx)(i.li,{children:"Energy resource management"}),"\n",(0,a.jsx)(i.li,{children:"Minimize end user device embodied carbon waste (assume circular economy)"}),"\n",(0,a.jsx)(i.li,{children:"Minimize server hardware embodied carbon waste"}),"\n",(0,a.jsx)(i.li,{children:"Product management"}),"\n",(0,a.jsx)(i.li,{children:"Education"}),"\n"]}),"\n",(0,a.jsx)("hr",{}),"\n",(0,a.jsx)(i.h2,{id:"scope",children:"Scope"}),"\n",(0,a.jsxs)(i.ul,{children:["\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Small business:"})," Maturity matrix per company"]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Small and Midsize Enterprise (SME):"})," Maturity matrix per company"]}),"\n",(0,a.jsxs)(i.li,{children:[(0,a.jsx)(i.strong,{children:"Larger organization:"})," Maturity matrix per business unit rather than per company"]}),"\n"]})]})}function u(e={}){const{wrapper:i}={...(0,r.a)(),...e.components};return i?(0,a.jsx)(i,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},9561:(e,i,n)=>{n.d(i,{Z:()=>a});const a=n.p+"assets/files/maturity-matrix-817ef92da90901aadb6f35bb9c53750b.svg"},7884:(e,i,n)=>{n.d(i,{Z:()=>a});const a=n.p+"assets/images/maturity-matrix-817ef92da90901aadb6f35bb9c53750b.svg"},1151:(e,i,n)=>{n.d(i,{Z:()=>s,a:()=>o});var a=n(7294);const r={},t=a.createContext(r);function o(e){const i=a.useContext(t);return a.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function s(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),a.createElement(t.Provider,{value:i},e.children)}}}]);
\ No newline at end of file
diff --git a/build/assets/js/a7bd4aaa.92817c21.js b/build/assets/js/a7bd4aaa.92817c21.js
new file mode 100644
index 0000000..619898a
--- /dev/null
+++ b/build/assets/js/a7bd4aaa.92817c21.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkgsmm=self.webpackChunkgsmm||[]).push([[518],{4974:(n,s,e)=>{e.r(s),e.d(s,{default:()=>d});e(7294);var r=e(1944);function o(n,s){return`docs-${n}-${s}`}var t=e(3797),c=e(8790),i=e(197),u=e(5893);function a(n){const{version:s}=n;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(i.Z,{version:s.version,tag:o(s.pluginId,s.version)}),(0,u.jsx)(r.d,{children:s.noIndex&&(0,u.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function l(n){const{version:s,route:e}=n;return(0,u.jsx)(r.FG,{className:s.className,children:(0,u.jsx)(t.q,{version:s,children:(0,c.H)(e.routes)})})}function d(n){return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(a,{...n}),(0,u.jsx)(l,{...n})]})}}}]);
\ No newline at end of file
diff --git a/build/assets/js/a94703ab.b2327cc7.js b/build/assets/js/a94703ab.b2327cc7.js
new file mode 100644
index 0000000..ce8eb25
--- /dev/null
+++ b/build/assets/js/a94703ab.b2327cc7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkgsmm=self.webpackChunkgsmm||[]).push([[368],{4547:(e,t,n)=>{n.r(t),n.d(t,{default:()=>be});var a=n(7294),o=n(512),i=n(1944),s=n(5281),l=n(6565),r=n(4731),c=n(5999),d=n(2466),u=n(5936);const m={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};var b=n(5893);function h(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:s,cancelScroll:l}=(0,d.Ct)();return(0,d.RF)(((e,n)=>{let{scrollY:a}=e;const s=n?.scrollY;s&&(i.current?i.current=!1:a>=s?(l(),o(!1)):a{e.location.hash&&(i.current=!0,o(!1))})),{shown:n,scrollToTop:()=>s(0)}}({threshold:300});return(0,b.jsx)("button",{"aria-label":(0,c.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.Z)("clean-btn",s.k.common.backToTopButton,m.backToTopButton,e&&m.backToTopButtonShow),type:"button",onClick:t})}var p=n(1442),x=n(6550),f=n(7524),j=n(6668),k=n(1327);function v(e){return(0,b.jsx)("svg",{width:"20",height:"20","aria-hidden":"true",...e,children:(0,b.jsxs)("g",{fill:"#7a7a7a",children:[(0,b.jsx)("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),(0,b.jsx)("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})]})})}const _={collapseSidebarButton:"collapseSidebarButton_PEFL",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_kv0_"};function g(e){let{onClick:t}=e;return(0,b.jsx)("button",{type:"button",title:(0,c.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.Z)("button button--secondary button--outline",_.collapseSidebarButton),onClick:t,children:(0,b.jsx)(v,{className:_.collapseSidebarButtonIcon})})}var C=n(9689),S=n(902);const I=Symbol("EmptyContext"),N=a.createContext(I);function T(e){let{children:t}=e;const[n,o]=(0,a.useState)(null),i=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return(0,b.jsx)(N.Provider,{value:i,children:t})}var B=n(6043),Z=n(8596),A=n(3692),L=n(2389);function y(e){let{collapsed:t,categoryLabel:n,onClick:a}=e;return(0,b.jsx)("button",{"aria-label":t?(0,c.I)({id:"theme.DocSidebarItem.expandCategoryAriaLabel",message:"Expand sidebar category '{label}'",description:"The ARIA label to expand the sidebar category"},{label:n}):(0,c.I)({id:"theme.DocSidebarItem.collapseCategoryAriaLabel",message:"Collapse sidebar category '{label}'",description:"The ARIA label to collapse the sidebar category"},{label:n}),"aria-expanded":!t,type:"button",className:"clean-btn menu__caret",onClick:a})}function w(e){let{item:t,onItemClick:n,activePath:i,level:r,index:c,...d}=e;const{items:u,label:m,collapsible:h,className:p,href:x}=t,{docs:{sidebar:{autoCollapseCategories:f}}}=(0,j.L)(),k=function(e){const t=(0,L.Z)();return(0,a.useMemo)((()=>e.href&&!e.linkUnlisted?e.href:!t&&e.collapsible?(0,l.LM)(e):void 0),[e,t])}(t),v=(0,l._F)(t,i),_=(0,Z.Mg)(x,i),{collapsed:g,setCollapsed:C}=(0,B.u)({initialState:()=>!!h&&(!v&&t.collapsed)}),{expandedItem:T,setExpandedItem:w}=function(){const e=(0,a.useContext)(N);if(e===I)throw new S.i6("DocSidebarItemsExpandedStateProvider");return e}(),E=function(e){void 0===e&&(e=!g),w(e?null:c),C(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:o}=e;const i=(0,S.D9)(t);(0,a.useEffect)((()=>{t&&!i&&n&&o(!1)}),[t,i,n,o])}({isActive:v,collapsed:g,updateCollapsed:E}),(0,a.useEffect)((()=>{h&&null!=T&&T!==c&&f&&C(!0)}),[h,T,c,C,f]),(0,b.jsxs)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemCategory,s.k.docs.docSidebarItemCategoryLevel(r),"menu__list-item",{"menu__list-item--collapsed":g},p),children:[(0,b.jsxs)("div",{className:(0,o.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":_}),children:[(0,b.jsx)(A.Z,{className:(0,o.Z)("menu__link",{"menu__link--sublist":h,"menu__link--sublist-caret":!x&&h,"menu__link--active":v}),onClick:h?e=>{n?.(t),x?E(!1):(e.preventDefault(),E())}:()=>{n?.(t)},"aria-current":_?"page":void 0,role:h&&!x?"button":void 0,"aria-expanded":h&&!x?!g:void 0,href:h?k??"#":k,...d,children:m}),x&&h&&(0,b.jsx)(y,{collapsed:g,categoryLabel:m,onClick:e=>{e.preventDefault(),E()}})]}),(0,b.jsx)(B.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:g,children:(0,b.jsx)(V,{items:u,tabIndex:g?-1:0,onItemClick:n,activePath:i,level:r+1})})]})}var E=n(3919),H=n(9471);const M={menuExternalLink:"menuExternalLink_NmtK"};function R(e){let{item:t,onItemClick:n,activePath:a,level:i,index:r,...c}=e;const{href:d,label:u,className:m,autoAddBaseUrl:h}=t,p=(0,l._F)(t,a),x=(0,E.Z)(d);return(0,b.jsx)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemLink,s.k.docs.docSidebarItemLinkLevel(i),"menu__list-item",m),children:(0,b.jsxs)(A.Z,{className:(0,o.Z)("menu__link",!x&&M.menuExternalLink,{"menu__link--active":p}),autoAddBaseUrl:h,"aria-current":p?"page":void 0,to:d,...x&&{onClick:n?()=>n(t):void 0},...c,children:[u,!x&&(0,b.jsx)(H.Z,{})]})},u)}const W={menuHtmlItem:"menuHtmlItem_M9Kj"};function F(e){let{item:t,level:n,index:a}=e;const{value:i,defaultStyle:l,className:r}=t;return(0,b.jsx)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemLink,s.k.docs.docSidebarItemLinkLevel(n),l&&[W.menuHtmlItem,"menu__list-item"],r),dangerouslySetInnerHTML:{__html:i}},a)}function P(e){let{item:t,...n}=e;switch(t.type){case"category":return(0,b.jsx)(w,{item:t,...n});case"html":return(0,b.jsx)(F,{item:t,...n});default:return(0,b.jsx)(R,{item:t,...n})}}function D(e){let{items:t,...n}=e;const a=(0,l.f)(t,n.activePath);return(0,b.jsx)(T,{children:a.map(((e,t)=>(0,b.jsx)(P,{item:e,index:t,...n},t)))})}const V=(0,a.memo)(D),U={menu:"menu_SIkG",menuWithAnnouncementBar:"menuWithAnnouncementBar_GW3s"};function K(e){let{path:t,sidebar:n,className:i}=e;const l=function(){const{isActive:e}=(0,C.n)(),[t,n]=(0,a.useState)(e);return(0,d.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return(0,b.jsx)("nav",{"aria-label":(0,c.I)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.Z)("menu thin-scrollbar",U.menu,l&&U.menuWithAnnouncementBar,i),children:(0,b.jsx)("ul",{className:(0,o.Z)(s.k.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:n,activePath:t,level:1})})})}const Y="sidebar_njMd",z="sidebarWithHideableNavbar_wUlq",G="sidebarHidden_VK0M",O="sidebarLogo_isFc";function q(e){let{path:t,sidebar:n,onCollapse:a,isHidden:i}=e;const{navbar:{hideOnScroll:s},docs:{sidebar:{hideable:l}}}=(0,j.L)();return(0,b.jsxs)("div",{className:(0,o.Z)(Y,s&&z,i&&G),children:[s&&(0,b.jsx)(k.Z,{tabIndex:-1,className:O}),(0,b.jsx)(K,{path:t,sidebar:n}),l&&(0,b.jsx)(g,{onClick:a})]})}const J=a.memo(q);var Q=n(3102),X=n(2961);const $=e=>{let{sidebar:t,path:n}=e;const a=(0,X.e)();return(0,b.jsx)("ul",{className:(0,o.Z)(s.k.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&a.toggle(),"link"===e.type&&a.toggle()},level:1})})};function ee(e){return(0,b.jsx)(Q.Zo,{component:$,props:e})}const te=a.memo(ee);function ne(e){const t=(0,f.i)(),n="desktop"===t||"ssr"===t,a="mobile"===t;return(0,b.jsxs)(b.Fragment,{children:[n&&(0,b.jsx)(J,{...e}),a&&(0,b.jsx)(te,{...e})]})}const ae={expandButton:"expandButton_TmdG",expandButtonIcon:"expandButtonIcon_i1dp"};function oe(e){let{toggleSidebar:t}=e;return(0,b.jsx)("div",{className:ae.expandButton,title:(0,c.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t,children:(0,b.jsx)(v,{className:ae.expandButtonIcon})})}const ie={docSidebarContainer:"docSidebarContainer_YfHR",docSidebarContainerHidden:"docSidebarContainerHidden_DPk8",sidebarViewport:"sidebarViewport_aRkj"};function se(e){let{children:t}=e;const n=(0,r.V)();return(0,b.jsx)(a.Fragment,{children:t},n?.name??"noSidebar")}function le(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:i}=e;const{pathname:l}=(0,x.TH)(),[r,c]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{r&&c(!1),!r&&(0,p.n)()&&c(!0),i((e=>!e))}),[i,r]);return(0,b.jsx)("aside",{className:(0,o.Z)(s.k.docs.docSidebarContainer,ie.docSidebarContainer,n&&ie.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ie.docSidebarContainer)&&n&&c(!0)},children:(0,b.jsx)(se,{children:(0,b.jsxs)("div",{className:(0,o.Z)(ie.sidebarViewport,r&&ie.sidebarViewportHidden),children:[(0,b.jsx)(ne,{sidebar:t,path:l,onCollapse:d,isHidden:r}),r&&(0,b.jsx)(oe,{toggleSidebar:d})]})})})}const re={docMainContainer:"docMainContainer_TBSr",docMainContainerEnhanced:"docMainContainerEnhanced_lQrH",docItemWrapperEnhanced:"docItemWrapperEnhanced_JWYK"};function ce(e){let{hiddenSidebarContainer:t,children:n}=e;const a=(0,r.V)();return(0,b.jsx)("main",{className:(0,o.Z)(re.docMainContainer,(t||!a)&&re.docMainContainerEnhanced),children:(0,b.jsx)("div",{className:(0,o.Z)("container padding-top--md padding-bottom--lg",re.docItemWrapper,t&&re.docItemWrapperEnhanced),children:n})})}const de={docRoot:"docRoot_UBD9",docsWrapper:"docsWrapper_hBAB"};function ue(e){let{children:t}=e;const n=(0,r.V)(),[o,i]=(0,a.useState)(!1);return(0,b.jsxs)("div",{className:de.docsWrapper,children:[(0,b.jsx)(h,{}),(0,b.jsxs)("div",{className:de.docRoot,children:[n&&(0,b.jsx)(le,{sidebar:n.items,hiddenSidebarContainer:o,setHiddenSidebarContainer:i}),(0,b.jsx)(ce,{hiddenSidebarContainer:o,children:t})]})]})}var me=n(5658);function be(e){const t=(0,l.SN)(e);if(!t)return(0,b.jsx)(me.Z,{});const{docElement:n,sidebarName:a,sidebarItems:c}=t;return(0,b.jsx)(i.FG,{className:(0,o.Z)(s.k.page.docsDocPage),children:(0,b.jsx)(r.b,{name:a,items:c,children:(0,b.jsx)(ue,{children:n})})})}},5658:(e,t,n)=>{n.d(t,{Z:()=>l});n(7294);var a=n(512),o=n(5999),i=n(2503),s=n(5893);function l(e){let{className:t}=e;return(0,s.jsx)("main",{className:(0,a.Z)("container margin-vert--xl",t),children:(0,s.jsx)("div",{className:"row",children:(0,s.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,s.jsx)(i.Z,{as:"h1",className:"hero__title",children:(0,s.jsx)(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}}}]);
\ No newline at end of file
diff --git a/build/assets/js/aba21aa0.d72a2cf8.js b/build/assets/js/aba21aa0.d72a2cf8.js
new file mode 100644
index 0000000..b875107
--- /dev/null
+++ b/build/assets/js/aba21aa0.d72a2cf8.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkgsmm=self.webpackChunkgsmm||[]).push([[629],{1765:s=>{s.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]);
\ No newline at end of file
diff --git a/build/assets/js/ae7f339f.64c89820.js b/build/assets/js/ae7f339f.64c89820.js
new file mode 100644
index 0000000..36d20dc
--- /dev/null
+++ b/build/assets/js/ae7f339f.64c89820.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkgsmm=self.webpackChunkgsmm||[]).push([[851],{8980:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>m,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var t=r(5893),s=r(1151);const i={description:"Maturity Matrix - Level 2 - Aware",sidebar_position:5,sidebar_label:"Level 2"},a="Level 2 - Aware",o={id:"gsmm/level-2",title:"Level 2 - Aware",description:"Maturity Matrix - Level 2 - Aware",source:"@site/docs/gsmm/level-2.md",sourceDirName:"gsmm",slug:"/gsmm/level-2",permalink:"/gsmm/level-2",draft:!1,unlisted:!1,editUrl:"https://github.com/Green-Software-Foundation/green-software-maturity-matrix/edit/dev/docs/gsmm/level-2.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{description:"Maturity Matrix - Level 2 - Aware",sidebar_position:5,sidebar_label:"Level 2"},sidebar:"tutorialSidebar",previous:{title:"Level 1",permalink:"/gsmm/level-1"},next:{title:"Level 3",permalink:"/gsmm/level-3"}},d={},l=[];function c(e){const n={h1:"h1",header:"header",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"level-2---aware",children:"Level 2 - Aware"})}),"\n",(0,t.jsx)(n.p,{children:"You know your organization\u2019s scope 1 and 2 emissions. You have a few projects driving greenness within your organization and beyond it using this data (by putting pressure on suppliers, for example). Your engineers have had some training in green systems, operations and patterns."}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Axis"}),(0,t.jsx)(n.th,{children:"State"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Whole organization energy commitments"}),(0,t.jsx)(n.td,{children:"CZero for scope 1, 2 and 3 by 2040 (note you may already be so-called \u201cCarbon neutral\u201d)"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Carbon footprint"}),(0,t.jsx)(n.td,{children:"you know what it is (scope 1 and 2)"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"CO2 equivalent metrics"}),(0,t.jsx)(n.td,{children:"annual, quarterly or monthly numbers from all suppliers (including outsourcers) and own systems for scope 1/2"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Server resource management"}),(0,t.jsx)(n.td,{children:"occasional spring cleans where you manually turn off idle or low value systems and delete/archive unneeded data"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Energy resource management"}),(0,t.jsx)(n.td,{children:"hosting in green regions/buying renewable energy"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Minimize end user device embodied carbon waste (assume circular economy)"}),(0,t.jsx)(n.td,{children:"some adhoc targets in place"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Minimize server hardware embodied carbon waste"}),(0,t.jsx)(n.td,{children:"some adhoc systems and some systems using multi-tenancy to improve utilization"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Product management"}),(0,t.jsx)(n.td,{children:"carbon awareness part of product design"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Education"}),(0,t.jsx)(n.td,{children:"basic training for all engineers & PMs. Champions are trained"})]})]})]})]})}function m(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>o,a:()=>a});var t=r(7294);const s={},i=t.createContext(s);function a(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/build/assets/js/b52cbc97.261cebb5.js b/build/assets/js/b52cbc97.261cebb5.js
new file mode 100644
index 0000000..280b8d0
--- /dev/null
+++ b/build/assets/js/b52cbc97.261cebb5.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkgsmm=self.webpackChunkgsmm||[]).push([[42],{6589:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>a,contentTitle:()=>d,default:()=>m,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var n=r(5893),i=r(1151);const s={description:"Maturity Matrix - Level 1 - Aspiring",sidebar_position:4,sidebar_label:"Level 1"},d="Level 1 - Aspiring",o={id:"gsmm/level-1",title:"Level 1 - Aspiring",description:"Maturity Matrix - Level 1 - Aspiring",source:"@site/docs/gsmm/level-1.md",sourceDirName:"gsmm",slug:"/gsmm/level-1",permalink:"/gsmm/level-1",draft:!1,unlisted:!1,editUrl:"https://github.com/Green-Software-Foundation/green-software-maturity-matrix/edit/dev/docs/gsmm/level-1.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{description:"Maturity Matrix - Level 1 - Aspiring",sidebar_position:4,sidebar_label:"Level 1"},sidebar:"tutorialSidebar",previous:{title:"Green Maturity Matrix",permalink:"/gsmm/"},next:{title:"Level 2",permalink:"/gsmm/level-2"}},a={},l=[];function c(e){const t={h1:"h1",header:"header",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"level-1---aspiring",children:"Level 1 - Aspiring"})}),"\n",(0,n.jsx)(t.p,{children:"You have individuals in your organization who care about green targets for technology but no systemic interest, processes or commitments. Some development teams measure their carbon emissions. This is where almost all of us are today."}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"Axis"}),(0,n.jsx)(t.th,{children:"State"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Whole organization energy commitments"}),(0,n.jsx)(t.td,{children:"none/CZero by 2050"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Carbon footprint"}),(0,n.jsx)(t.td,{children:"you don\u2019t know what it is"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"CO2 equivalent metrics"}),(0,n.jsx)(t.td,{children:"No metrics"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Server resource management"}),(0,n.jsx)(t.td,{children:"No rightsizing takes place and zero knowledge about unused \u201dzombie\u201d systems"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Energy resource management"}),(0,n.jsx)(t.td,{children:"None - running on demand"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Minimize end user device embodied carbon waste (assume circular economy)"}),(0,n.jsx)(t.td,{children:"No end user device longevity targets"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Minimize server hardware embodied carbon waste"}),(0,n.jsx)(t.td,{children:"No server utilization targets"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Product management"}),(0,n.jsx)(t.td,{children:"Not carbon aware"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Education"}),(0,n.jsx)(t.td,{children:"None/ad-hoc, individual"})]})]})]})]})}function m(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},1151:(e,t,r)=>{r.d(t,{Z:()=>o,a:()=>d});var n=r(7294);const i={},s=n.createContext(i);function d(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:d(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/build/assets/js/c377a04b.85f3709c.js b/build/assets/js/c377a04b.85f3709c.js
new file mode 100644
index 0000000..af5e54f
--- /dev/null
+++ b/build/assets/js/c377a04b.85f3709c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkgsmm=self.webpackChunkgsmm||[]).push([[971],{8463:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>h,contentTitle:()=>a,default:()=>c,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var n=r(5893),i=r(1151);const s={title:"Green Software Maturity Matrix",description:"The Green Software Maturity Matrix is a self-assessment tool. It helps organisations understand the extent to which they have implemented green principles, patterns, and processes for building and operating their software systems.",sidebar_position:1,sidebar_label:"Home",hide_table_of_contents:!0},a="Green Software Maturity Matrix",o={id:"index",title:"Green Software Maturity Matrix",description:"The Green Software Maturity Matrix is a self-assessment tool. It helps organisations understand the extent to which they have implemented green principles, patterns, and processes for building and operating their software systems.",source:"@site/docs/index.md",sourceDirName:".",slug:"/",permalink:"/",draft:!1,unlisted:!1,editUrl:"https://github.com/Green-Software-Foundation/green-software-maturity-matrix/edit/dev/docs/index.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{title:"Green Software Maturity Matrix",description:"The Green Software Maturity Matrix is a self-assessment tool. It helps organisations understand the extent to which they have implemented green principles, patterns, and processes for building and operating their software systems.",sidebar_position:1,sidebar_label:"Home",hide_table_of_contents:!0},sidebar:"tutorialSidebar",next:{title:"Maturity Matrix?",permalink:"/history"}},h={},d=[{value:"Executive Summary",id:"executive-summary",level:2},{value:"Quick Links",id:"quick-links",level:3}];function l(e){const t={a:"a",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.header,{children:(0,n.jsx)(t.h1,{id:"green-software-maturity-matrix",children:"Green Software Maturity Matrix"})}),"\n",(0,n.jsx)(t.h2,{id:"executive-summary",children:"Executive Summary"}),"\n",(0,n.jsx)(t.p,{children:"The Green Software Maturity Matrix (GSMM) is a self-assessment tool. It helps organizations understand the extent to which they have implemented green principles, patterns, and processes for building and operating their software systems. The purpose is to \u201craise the floor and the ceiling.\u201d I.e. to lift the behavior of the laggards on sustainable strategy and inspire those doing well to achieve more by showing what the leaders in this area are aiming for."}),"\n",(0,n.jsx)(t.h3,{id:"quick-links",children:"Quick Links"}),"\n",(0,n.jsxs)(t.p,{children:["The Green Software Maturity Matrix is a project run through the ",(0,n.jsx)(t.a,{href:"https://grnsft.org/community-wg",children:"Community Working Group"})," in the ",(0,n.jsx)(t.a,{href:"https://greensoftware.foundation/",children:"Green Software Foundation"}),"."]}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/Green-Software-Foundation/green-software-maturity-matrix",children:"GitHub Repository"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://greensoftwarefoundation.atlassian.net/wiki/spaces/~612dd45e45cd76006a84071a/pages/82214913/Community+Green+Software+Maturity+Matrix",children:"Project Page"})}),"\n",(0,n.jsx)(t.li,{children:(0,n.jsx)(t.a,{href:"https://github.com/Green-Software-Foundation/oc/issues/46",children:"Project proposal"})}),"\n"]})]})}function c(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},1151:(e,t,r)=>{r.d(t,{Z:()=>o,a:()=>a});var n=r(7294);const i={},s=n.createContext(i);function a(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/build/assets/js/cf03e5b8.c1abf50c.js b/build/assets/js/cf03e5b8.c1abf50c.js
new file mode 100644
index 0000000..7f28977
--- /dev/null
+++ b/build/assets/js/cf03e5b8.c1abf50c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunkgsmm=self.webpackChunkgsmm||[]).push([[144],{6381:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>s,metadata:()=>a,toc:()=>c});var o=t(5893),i=t(1151);const s={title:"Solutions",description:"TBC",sidebar_position:9,sidebar_label:"Solutions"},r="Solutions",a={id:"solutions",title:"Solutions",description:"TBC",source:"@site/docs/solutions.md",sourceDirName:".",slug:"/solutions",permalink:"/solutions",draft:!1,unlisted:!1,editUrl:"https://github.com/Green-Software-Foundation/green-software-maturity-matrix/edit/dev/docs/solutions.md",tags:[],version:"current",sidebarPosition:9,frontMatter:{title:"Solutions",description:"TBC",sidebar_position:9,sidebar_label:"Solutions"},sidebar:"tutorialSidebar",previous:{title:"Level 5",permalink:"/gsmm/level-5"}},l={},c=[{value:"Level 1 > 2",id:"level-1--2",level:2},{value:"Level 2 > 3",id:"level-2--3",level:2},{value:"Level 3 > 4",id:"level-3--4",level:2},{value:"Level 4 > 5",id:"level-4--5",level:2},{value:"Level 5",id:"level-5",level:2}];function u(e){const n={h1:"h1",h2:"h2",header:"header",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.header,{children:(0,o.jsx)(n.h1,{id:"solutions",children:"Solutions"})}),"\n",(0,o.jsx)(n.p,{children:"Start to list tools that are available that can help get to each level"}),"\n",(0,o.jsx)(n.h2,{id:"level-1--2",children:"Level 1 > 2"}),"\n",(0,o.jsx)(n.p,{children:"Challenge - cut your resource use by 50%:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Identify and switch off those zombie servers that aren\u2019t doing anything (or anything much). Remember, this alone saved VMWare 66% on their emissions when they moved one DC in Singapore."}),"\n",(0,o.jsx)(n.li,{children:"Do a one-off right-sizing exercise on all your servers because everything tends to be overprovisioned to start with."}),"\n",(0,o.jsx)(n.li,{children:"Are you turning off your test systems in the evening and on weekends?"}),"\n",(0,o.jsx)(n.li,{children:"Because of its extreme multi-tenancy, the cloud already uses only a fraction of the electricity of an on prem DC. AWS claims to be 3.4 times more energy efficient than an average US DC and 5 times more efficient than a European one. Move some stuff there. (Note - you could also call on your non-cloud hosting providers to be more efficient. That isn\u2019t likely to pay off inside 6 months but you need to play the long game if you want to stay out of the cloud)."}),"\n",(0,o.jsx)(n.li,{children:"If you are already in the cloud, review your instance types. Could you be using Burstable instances or autoscaling?"}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["Pini Reznik of GreenOps consultancy re",":cinq",' told us that, in his experience, "An average cloud system can cut its resource consumption by up to 50% just using ops best practice tuning and optimization." This is relatively straightforward stuff.']}),"\n",(0,o.jsx)(n.p,{children:"You can measure the scale of cut you\u2019ve achieved by the reduction in your like-for-like hosting bills. Hosting cost is only a rough proxy for emissions but it\u2019s good enough at this stage and it\u2019s simple to explain and track. No clever tools required!"}),"\n",(0,o.jsx)(n.p,{children:"Hurray! You\u2019ve saved loads of money and you are now working on level 2 of the maturity matrix."}),"\n",(0,o.jsx)(n.h2,{id:"level-2--3",children:"Level 2 > 3"}),"\n",(0,o.jsx)(n.p,{children:"Challenge - cut your resource use by another 30%:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Make sure your hosting provider or operations team has extremely tough carbon zero hosting targets. Compare them with the cloud and pile on some pressure."}),"\n",(0,o.jsx)(n.li,{children:"Ensure machines are hosted on grids and in regions with a high renewable or nuclear mix (AWS currently has 19 100% renewable regions, for example)."}),"\n",(0,o.jsx)(n.li,{children:"Choose only green platforms that are committed to a low carbon future and have a community that will hold them to that commitment. Move to those platforms if necessary."}),"\n",(0,o.jsx)(n.li,{children:"Choose an architecture that will support demand shifting and shaping (i.e. usually not on demand monoliths)."}),"\n",(0,o.jsx)(n.li,{children:"Set high bars for operational efficiency and machine utilization because the best way to both cut emissions and embodied carbon is to use fewer servers. The public clouds are comparatively very efficient. Again, that is because of scale and incentives rather than saintliness. We don\u2019t care. In most cases we can cut our emissions very significantly by moving to a public cloud and using its services well (\u2018lift and shift\u2019 buys you something but you can move beyond it)."}),"\n",(0,o.jsx)(n.li,{children:"Design products and systems to support demand shaping and shifting for carbon awareness."}),"\n",(0,o.jsx)(n.li,{children:"Do less and be LEAN in approach. Don\u2019t build and save stuff before need."}),"\n",(0,o.jsx)(n.li,{children:"Make sure your software is never the final nail in the coffin for working end user devices because of the lack of backwards compatibility or security patches."}),"\n",(0,o.jsx)(n.li,{children:"Build basic performance metrics into your systems and do at least basic performance analysis. Resolve any egregious bottlenecks that you find (and you will). They are just bugs that are slowing you down, costing you money and emitting greenhouse gasses. Performance is often a good proxy for carbon emissions."}),"\n",(0,o.jsx)(n.li,{children:"Start to automate the right-sizing you did at level 1 and look at LightswitchOps so you can turn off systems at will if you think they are no longer used. You\u2019ll need some simple metrics for that too so you can spot low activity servers."}),"\n",(0,o.jsx)(n.li,{children:"For code that has to run on demand, make it efficient."}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"level-3--4",children:"Level 3 > 4"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"You analyze cloud builds e.g. cloud carbon footprint tool."}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"level-4--5",children:"Level 4 > 5"}),"\n",(0,o.jsx)(n.h2,{id:"level-5",children:"Level 5"})]})}function d(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>r});var o=t(7294);const i={},s=o.createContext(i);function r(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/build/assets/js/main.3d6fd999.js b/build/assets/js/main.3d6fd999.js
new file mode 100644
index 0000000..2864d07
--- /dev/null
+++ b/build/assets/js/main.3d6fd999.js
@@ -0,0 +1,2 @@
+/*! For license information please see main.3d6fd999.js.LICENSE.txt */
+(self.webpackChunkgsmm=self.webpackChunkgsmm||[]).push([[179],{8726:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t{"use strict";n.d(t,{Z:()=>p});n(7294);var r=n(8726),o=n.n(r),a=n(6887);const i={"0d5331fe":[()=>n.e(850).then(n.bind(n,3864)),"@site/docs/history.md",3864],17896441:[()=>Promise.all([n.e(532),n.e(918)]).then(n.bind(n,2501)),"@theme/DocItem",2501],"22dd74f7":[()=>n.e(980).then(n.t.bind(n,5904,19)),"@generated/docusaurus-plugin-content-docs/default/p/index-466.json",5904],"2930bd34":[()=>n.e(497).then(n.bind(n,3827)),"@site/docs/gsmm/level-5.md",3827],"30ac88d3":[()=>n.e(527).then(n.bind(n,3575)),"@site/docs/gsmm/level-3.md",3575],"5764eac9":[()=>n.e(510).then(n.bind(n,4486)),"@site/docs/gsmm/level-4.md",4486],"5e95c892":[()=>n.e(661).then(n.bind(n,1892)),"@theme/DocsRoot",1892],"7a05b6c5":[()=>n.e(209).then(n.bind(n,2777)),"@site/docs/gsmm/index.md",2777],a7bd4aaa:[()=>n.e(518).then(n.bind(n,4974)),"@theme/DocVersionRoot",4974],a94703ab:[()=>Promise.all([n.e(532),n.e(368)]).then(n.bind(n,4547)),"@theme/DocRoot",4547],aba21aa0:[()=>n.e(629).then(n.t.bind(n,1765,19)),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",1765],ae7f339f:[()=>n.e(851).then(n.bind(n,8980)),"@site/docs/gsmm/level-2.md",8980],b52cbc97:[()=>n.e(42).then(n.bind(n,6589)),"@site/docs/gsmm/level-1.md",6589],c377a04b:[()=>n.e(971).then(n.bind(n,8463)),"@site/docs/index.md",8463],cf03e5b8:[()=>n.e(144).then(n.bind(n,6381)),"@site/docs/solutions.md",6381]};var l=n(5893);function s(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,l.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,l.jsx)("p",{children:String(t)}),(0,l.jsx)("div",{children:(0,l.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,l.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,l.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,l.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,l.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,l.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,l.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,l.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var u=n(9670),c=n(226);function d(e,t){if("*"===e)return o()({loading:s,loader:()=>n.e(772).then(n.bind(n,1772)),modules:["@theme/NotFound"],webpack:()=>[1772],render(e,t){const n=e.default;return(0,l.jsx)(c.z,{value:{plugin:{name:"native",id:"default"}},children:(0,l.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],m=(0,u.Z)(r);return Object.entries(m).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:s,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let i=o;const l=n.split(".");l.slice(0,-1).forEach((e=>{i=i[e]})),i[l[l.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;delete o.__context;const s=o.__props;return delete o.__props,(0,l.jsx)(c.z,{value:i,children:(0,l.jsx)(a,{...o,...s,...n})})}})}const p=[{path:"/",component:d("/","eac"),routes:[{path:"/",component:d("/","a80"),routes:[{path:"/",component:d("/","d91"),routes:[{path:"/gsmm/",component:d("/gsmm/","ee9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/gsmm/level-1",component:d("/gsmm/level-1","d8b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/gsmm/level-2",component:d("/gsmm/level-2","dbf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/gsmm/level-3",component:d("/gsmm/level-3","493"),exact:!0,sidebar:"tutorialSidebar"},{path:"/gsmm/level-4",component:d("/gsmm/level-4","3da"),exact:!0,sidebar:"tutorialSidebar"},{path:"/gsmm/level-5",component:d("/gsmm/level-5","cee"),exact:!0,sidebar:"tutorialSidebar"},{path:"/history",component:d("/history","510"),exact:!0,sidebar:"tutorialSidebar"},{path:"/solutions",component:d("/solutions","8a3"),exact:!0,sidebar:"tutorialSidebar"},{path:"/",component:d("/","efb"),exact:!0,sidebar:"tutorialSidebar"}]}]}]},{path:"*",component:d("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>i});var r=n(7294),o=n(5893);const a=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,o.jsx)(a.Provider,{value:n,children:t})}},2849:(e,t,n)=>{"use strict";var r=n(7294),o=n(745),a=n(405),i=n(3727),l=n(6809),s=n(412);const u=[n(2497),n(3310),n(8320),n(2295)];var c=n(723),d=n(6550),p=n(8790),f=n(5893);function m(e){let{children:t}=e;return(0,f.jsx)(f.Fragment,{children:t})}var h=n(5742),g=n(2263),y=n(4996),b=n(6668),v=n(1944),w=n(4711),k=n(9727);const x="default";var S=n(8780),E=n(197);function _(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,g.Z)(),r=(0,w.l)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,f.jsxs)(h.Z,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,f.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,f.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,f.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function C(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.Z)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,g.Z)(),{pathname:r}=(0,d.TH)();return e+(0,S.Do)((0,y.ZP)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:r;return(0,f.jsxs)(h.Z,{children:[(0,f.jsx)("meta",{property:"og:url",content:o}),(0,f.jsx)("link",{rel:"canonical",href:o})]})}function T(){const{i18n:{currentLocale:e}}=(0,g.Z)(),{metadata:t,image:n}=(0,b.L)();return(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(h.Z,{children:[(0,f.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,f.jsx)("body",{className:k.h})]}),n&&(0,f.jsx)(v.d,{image:n}),(0,f.jsx)(C,{}),(0,f.jsx)(_,{}),(0,f.jsx)(E.Z,{tag:x,locale:e}),(0,f.jsx)(h.Z,{children:t.map(((e,t)=>(0,f.jsx)("meta",{...e},t)))})]})}const j=new Map;var A=n(8934),L=n(8940),P=n(469);function N(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const R=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,P.Z)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),N("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function O(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,p.f)(c.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class D extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.Z.canUseDOM?N("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=N("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),O(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,f.jsx)(R,{previousLocation:this.previousLocation,location:t,children:(0,f.jsx)(d.AW,{location:t,render:()=>e})})}}const I=D,F="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",z="__docusaurus-base-url-issue-banner-suggestion-container";function B(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${F}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n
This is a draft document only and has not been approved or adopted by the Green Software Foundation. this draft may not be relied upon for any purpose other than review of the current state of development.
A Green Software Maturity Matrix
+
What does this mean in a green software context for an organization? Let’s be realistic. Almost all enterprises are at level 1 right now. Going green is the most difficult project our industry faces.
You have individuals in your organization who care about green targets for technology but no systemic interest, processes or commitments. Some development teams measure their carbon emissions. This is where almost all of us are today.
You know your organization’s scope 1 and 2 emissions. You have a few projects driving greenness within your organization and beyond it using this data (by putting pressure on suppliers, for example). Your engineers have had some training in green systems, operations and patterns.
You know your scope 1, 2 and 3 emissions on a daily, weekly, monthly or annual basis. You have been acting on reducing the scope 1 and 2 emissions for a while and your carbon footprint is going down per some consistent, org-specific unit of output, e.g per order. You have defined processes for every team including regular reporting and reviewing of CO2 equivalent emissions for all IT related operations. Your PM teams have a remit to avoid waste, for example saving no more data than is necessary or implementing any functionality before need, and you can switch off zombie or low use services immediately (“Lightswitch Ops”). You have automatic resilience to weather-related operational risks (e.g. DC outages). You are aware of and discuss the tradeoffs between embodied carbon and carbon generated by energy usage. You have plans in place to minimize your embodied carbon footprint, including significantly extending the life expectancy of both the servers and end user devices you run on.
You have a measurement system in place that is producing good real-time scope 1, 2, and 3 data and although it’s not currently driving the business day-to-day, the business is very aware of it. Using the more limited scope 1, 2, and 3 data you have had for a while, you have already achieved net carbon zero using no more than 10% offsets. (Note offsets are highly problematic but they demonstrate you are regularly measuring). You perform demand shaping; pre-calculation and caching; and time and location shifting, for example, to adapt your workloads to current conditions. You automatically delete or archive data that isn’t in regular use. Services no longer in use are automatically turned off and rightsizing happens automatically (i.e. you apply SRE principles). Your applications are Lean and you constantly review and retire functionality that is insufficiently used. Your organizational strategy has been aligned with being green as a business goal - perhaps for reasons of ESG, cost, resilience, or market access to the EU - and delivery on CO2 targets is regularly discussed and reported at senior level. Your total carbon footprint is going down even as you grow. You are also actively driving the carbon footprint of your suppliers to go down. You never cause hardware less than ten years old to become end of life either by lack of security patches or lack of backwards compatibility in your applications. You are actively driving the carbon footprint of your customers to go down (beyond simply their use of your services and devices) for example by providing scope 3 reporting for your goods and services. Examples (for some of it): Google, AWS, MS.
You’ve got there. You have achieved 24/7 CFE and require no more than 1% offsets to handle hard to shift embodied carbon. You have team level measurable goals (OKRs etc) for your CO2 measurements. You are optimizing for minimal CO2 emissions using your dynamic, real-time data. You and the services you rely on use real-time information including dynamic grid energy data to make rapid, quantitative decisions that allow you to be greener. This could (and probably will) be via a service you use rather than something you built yourself. You are already an SRE-aware organization that thinks in terms of error budgets for outages and downtime and you now think about carbon budgets in the same way. Using predictions based on factors such as weather and grid congestion, you change and move almost all of your workloads ahead of time to match your electricity requirements to local green power availability (aka 24/7 CFE) and any time sensitive workloads are highly optimized for minimal electricity use. You never cause hardware to become end of life either by lack of security patches or lack of backwards compatibility. You are ready for the energy transition and won’t be caught by surprise by sudden new rules or constraints.
This is a draft document only and has not been approved or adopted by the Green Software Foundation. this draft may not be relied upon for any purpose other than review of the current state of development.
Level 1 - Aspiring
+
You have individuals in your organization who care about green targets for technology but no systemic interest, processes or commitments. Some development teams measure their carbon emissions. This is where almost all of us are today.
+
Axis
State
Whole organization energy commitments
none/CZero by 2050
Carbon footprint
you don’t know what it is
CO2 equivalent metrics
No metrics
Server resource management
No rightsizing takes place and zero knowledge about unused ”zombie” systems
Energy resource management
None - running on demand
Minimize end user device embodied carbon waste (assume circular economy)
No end user device longevity targets
Minimize server hardware embodied carbon waste
No server utilization targets
Product management
Not carbon aware
Education
None/ad-hoc, individual
+
+
\ No newline at end of file
diff --git a/build/gsmm/level-2/index.html b/build/gsmm/level-2/index.html
new file mode 100644
index 0000000..d8be865
--- /dev/null
+++ b/build/gsmm/level-2/index.html
@@ -0,0 +1,15 @@
+
+
+
+
+
+Level 2 - Aware | Green Software Maturity Matrix
+
+
+
+
+
This is a draft document only and has not been approved or adopted by the Green Software Foundation. this draft may not be relied upon for any purpose other than review of the current state of development.
Level 2 - Aware
+
You know your organization’s scope 1 and 2 emissions. You have a few projects driving greenness within your organization and beyond it using this data (by putting pressure on suppliers, for example). Your engineers have had some training in green systems, operations and patterns.
+
Axis
State
Whole organization energy commitments
CZero for scope 1, 2 and 3 by 2040 (note you may already be so-called “Carbon neutral”)
Carbon footprint
you know what it is (scope 1 and 2)
CO2 equivalent metrics
annual, quarterly or monthly numbers from all suppliers (including outsourcers) and own systems for scope 1/2
Server resource management
occasional spring cleans where you manually turn off idle or low value systems and delete/archive unneeded data
Energy resource management
hosting in green regions/buying renewable energy
Minimize end user device embodied carbon waste (assume circular economy)
some adhoc targets in place
Minimize server hardware embodied carbon waste
some adhoc systems and some systems using multi-tenancy to improve utilization
Product management
carbon awareness part of product design
Education
basic training for all engineers & PMs. Champions are trained
+
+
\ No newline at end of file
diff --git a/build/gsmm/level-3/index.html b/build/gsmm/level-3/index.html
new file mode 100644
index 0000000..1397541
--- /dev/null
+++ b/build/gsmm/level-3/index.html
@@ -0,0 +1,15 @@
+
+
+
+
+
+Level 3 - Acting | Green Software Maturity Matrix
+
+
+
+
+
This is a draft document only and has not been approved or adopted by the Green Software Foundation. this draft may not be relied upon for any purpose other than review of the current state of development.
Level 3 - Acting
+
You know your scope 1, 2 and 3 emissions on a daily, weekly, monthly or annual basis. You have been acting on reducing the scope 1 and 2 emissions for a while and your carbon footprint is going down per some consistent, org-specific unit of output, e.g per order. You have defined processes for every team including regular reporting and reviewing of CO2 equivalent emissions for all IT related operations. Your PM teams have a remit to avoid waste, for example saving no more data than is necessary or implementing any functionality before need, and you can switch off zombie or low use services immediately (“Lightswitch Ops”). You have automatic resilience to weather-related operational risks (e.g. DC outages). You are aware of and discuss the tradeoffs between embodied carbon and carbon generated by energy usage. You have plans in place to minimize your embodied carbon footprint, including significantly extending the life expectancy of both the servers and end user devices you run on.
+
Axis
State
Whole organization energy commitments
already net CZero with offsets
Carbon footprint
you know what it is (scope 1, 2 and 3) and it is reducing per unit of output, e.g. orders
CO2 equivalent metrics
daily numbers from all suppliers and own systems for scope 1/2/3 and embodied carbon
Server resource management
all systems can be safely switched off (aka Lightswitch Ops) and there are processes for doing so. You have knowledge of what is running on all your machines and there are no zombie services. You save no unnecessary data and it is maintained in the optimal medium (e.g. tape if the data is not required for real time queries)
Energy resource management
at least part of your systems are dynamically managed based on green electricity availability (either via direct orchestration or through a cloud service)
Minimize end user device embodied carbon waste (assume circular economy)
defined processes in place that ensure ten year old hardware is supported by your software for most commonly used devices (90%+)
Minimize server hardware embodied carbon waste
defined utilization targets. All systems use some form of multi-tenancy. Servers all have a 5 year life expectancy
Product management
all new product design supports demand shifting/shaping and Lean concepts are followed. End user devices prompt for green/off peak charging. No more data is saved than necessary
Education
advanced training for all engineers & PMs
+
+
\ No newline at end of file
diff --git a/build/gsmm/level-4/index.html b/build/gsmm/level-4/index.html
new file mode 100644
index 0000000..a30c83d
--- /dev/null
+++ b/build/gsmm/level-4/index.html
@@ -0,0 +1,15 @@
+
+
+
+
+
+Level 4 - Awesome | Green Software Maturity Matrix
+
+
+
+
+
This is a draft document only and has not been approved or adopted by the Green Software Foundation. this draft may not be relied upon for any purpose other than review of the current state of development.
Level 4 - Awesome
+
You have a measurement system in place that is producing good real-time scope 1, 2, and 3 data and although it’s not currently driving the business day-to-day, the business is very aware of it. Using the more limited scope 1, 2, and 3 data you have had for a while, you have already achieved net carbon zero using no more than 10% offsets. (Note offsets are highly problematic but they demonstrate you are regularly measuring). You perform demand shaping; pre-calculation and caching; and time and location shifting, for example, to adapt your workloads to current conditions. You automatically delete or archive data that isn’t in regular use. Services no longer in use are automatically turned off and rightsizing happens automatically (i.e. you apply SRE principles). Your applications are Lean and you constantly review and retire functionality that is insufficiently used. Your organizational strategy has been aligned with being green as a business goal - perhaps for reasons of ESG, cost, resilience, or market access to the EU - and delivery on CO2 targets is regularly discussed and reported at senior level. Your total carbon footprint is going down even as you grow. You are also actively driving the carbon footprint of your suppliers to go down. You never cause hardware less than ten years old to become end of life either by lack of security patches or lack of backwards compatibility in your applications. You are actively driving the carbon footprint of your customers to go down (beyond simply their use of your services and devices) for example by providing scope 3 reporting for your goods and services. Examples (for some of it): Google, AWS, MS.
+
Axis
State
Whole organization energy commitments
already net CZero with no more than 10% offsets
Carbon footprint
it is reducing full stop and so is that of your suppliers
CO2 equivalent metrics
Real time through easy standardized APIs together with projections
Server resource management
all turning off and rightsizing happens automatically and data that is not regularly accessed is automatically deleted or archived
Energy resource management
all your systems support demand shifting and shaping based on energy data
Minimize end user device embodied carbon waste (assume circular economy)
automated processes ensure ten year old hardware is supported by your software for all devices
Minimize server hardware embodied carbon waste
optimal utilization achieved for every server using automated orchestration. Servers all have a 10 year life expectancy
Product management
carbon emissions are tracked per feature. Feature use is monitored and low use/poor carbon ROI features retired
Education
only basic training needed - everything is green by default
+
+
\ No newline at end of file
diff --git a/build/gsmm/level-5/index.html b/build/gsmm/level-5/index.html
new file mode 100644
index 0000000..f6daca6
--- /dev/null
+++ b/build/gsmm/level-5/index.html
@@ -0,0 +1,15 @@
+
+
+
+
+
+Level 5 - Inspiring | Green Software Maturity Matrix
+
+
+
+
+
This is a draft document only and has not been approved or adopted by the Green Software Foundation. this draft may not be relied upon for any purpose other than review of the current state of development.
Level 5 - Inspiring
+
You’ve got there. You have achieved 24/7 CFE and require no more than 1% offsets to handle hard to shift embodied carbon. You have team level measurable goals (OKRs etc) for your CO2 measurements. You are optimizing for minimal CO2 emissions using your dynamic, real-time data. You and the services you rely on use real-time information including dynamic grid energy data to make rapid, quantitative decisions that allow you to be greener. This could (and probably will) be via a service you use rather than something you built yourself. You are already an SRE-aware organization that thinks in terms of error budgets for outages and downtime and you now think about carbon budgets in the same way. Using predictions based on factors such as weather and grid congestion, you change and move almost all of your workloads ahead of time to match your electricity requirements to local green power availability (aka 24/7 CFE) and any time sensitive workloads are highly optimized for minimal electricity use. You never cause hardware to become end of life either by lack of security patches or lack of backwards compatibility. You are ready for the energy transition and won’t be caught by surprise by sudden new rules or constraints.
+
Axis
State
Whole organization energy commitments
already 24/7 CFE with no more than 1% offsets, monitored by a tight carbon error budget
Carbon footprint
it is as close to zero as achievable
CO2 equivalent metrics
Real time through easy standardized APIs together with projections
Server resource management
you have a rigorous carbon error budget including your scope 3 embodied carbon and all your resource use is tracked and managed through it
Energy resource management
you run 24/7 CFE with a rigorous carbon error budget
Minimize end user device embodied carbon waste (assume circular economy)
automated processes ensure backwards compatibility and security patches for all devices (software never kills a working device). Devices last forever al la Theseus’ ship/George Washington’s axe/Trigger’s broom
Minimize server hardware embodied carbon waste
hardware use is minimized by using full grid-aware integration with end user devices including phones, laptops, smart clothing, fridges…
Product management
your features are tracked against your scope 1/2/3 carbon error budget
Education
you train others in what you have achieved
+
+
\ No newline at end of file
diff --git a/build/history/index.html b/build/history/index.html
new file mode 100644
index 0000000..37b06ad
--- /dev/null
+++ b/build/history/index.html
@@ -0,0 +1,39 @@
+
+
+
+
+
+What is a Maturity Matrix? | Green Software Maturity Matrix
+
+
+
+
+
This is a draft document only and has not been approved or adopted by the Green Software Foundation. this draft may not be relied upon for any purpose other than review of the current state of development.
What is a Maturity Matrix?
+
Maturity matrices are used in fields like project management and cybersecurity to help organizations grok where they currently stand in terms of best practices, as well as the steps they can take to achieve higher levels of performance. The green software maturity matrix is a framework for assessing the level of a tech organization’s ability to handle the energy transition.
+
The purpose of moving up the GSMM levels is not merely to be “ethical” or good. It is a risk management strategy to provide resilience to:
+
+
Tightening ESG and other (e.g. EU) reporting requirements around sustainable IT.
+
Physical disruption to IT systems caused by climate change.
+
Pricing changes, for example the impact of highly differential dynamic electricity tariffs or reuse, repair, and recycle rules from the EU.
+
Hiring and retaining employees who want to be part of the solution to humanity’s greatest challenge. This is particularly true for younger staff.
The Capability Maturity Model Integration (CMMI), which is a bit of a mouthful, was originally developed by the Software Engineering Institute (SEI) at Carnegie Mellon University. The CMMI is a framework for assessing and guiding organizations' process improvement efforts, and has 5 maturity levels:
+
[[PLACEHOLDER FOR CMMI IMAGE]]
+
+
Level 1 - Initial: Processes are unpredictable, poorly controlled, and reactive at best.
+
Level 2 - Reactively managed: Per-project processes. Often still reactive.
+
Level 3 - Defined: Processes are standardized, documented, well understood and reviewed.
+
Level 4 - Quantitatively Managed: Processes are measured and controlled.
+
Level 5 - Optimizing: Continuous improvement occurs based on quantitative feedback.
+
+
We reckon this broadly means:
+
+
Level 1: You are floundering. No organization level strategy. Maybe a few individuals who care and/or are knowledgeable. Purely reactive. This is where most of us are on being green at this point.
+
Level 2: You are starting to get some handle on it but without consistency. Mostly reactive. How advanced you are varies by project and team. You have the bare minimum of data.
+
Level 3: You are good. You have decent, basic org-wide green tech knowledge and data. You have defined processes for handling that data that are applied across your organization.
+
Level 4: You are awesome. You can measure your progress dynamically (i.e. you have real -time data).
+
Level 5: You have ascended to the next plane of existence. You monitor and improve based on your real-time data. You give aspirational talks at tech conferences and what people are aspiring to is what you have been doing for ages. You are the tech equivalent of a being of pure energy. Think Yoda with a keyboard.
+
+
+
\ No newline at end of file
diff --git a/build/img/docusaurus-social-card.jpg b/build/img/docusaurus-social-card.jpg
new file mode 100644
index 0000000..ffcb448
Binary files /dev/null and b/build/img/docusaurus-social-card.jpg differ
diff --git a/build/img/favicon.ico b/build/img/favicon.ico
new file mode 100644
index 0000000..f0c702d
Binary files /dev/null and b/build/img/favicon.ico differ
diff --git a/build/img/logo.svg b/build/img/logo.svg
new file mode 100644
index 0000000..ff6fb22
--- /dev/null
+++ b/build/img/logo.svg
@@ -0,0 +1,31 @@
+
+
+
diff --git a/build/img/maturity-matrix.svg b/build/img/maturity-matrix.svg
new file mode 100644
index 0000000..bd52a9e
--- /dev/null
+++ b/build/img/maturity-matrix.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/build/index.html b/build/index.html
new file mode 100644
index 0000000..4fdd383
--- /dev/null
+++ b/build/index.html
@@ -0,0 +1,22 @@
+
+
+
+
+
+Green Software Maturity Matrix | Green Software Maturity Matrix
+
+
+
+
+
This is a draft document only and has not been approved or adopted by the Green Software Foundation. this draft may not be relied upon for any purpose other than review of the current state of development.
The Green Software Maturity Matrix (GSMM) is a self-assessment tool. It helps organizations understand the extent to which they have implemented green principles, patterns, and processes for building and operating their software systems. The purpose is to “raise the floor and the ceiling.” I.e. to lift the behavior of the laggards on sustainable strategy and inspire those doing well to achieve more by showing what the leaders in this area are aiming for.
This is a draft document only and has not been approved or adopted by the Green Software Foundation. this draft may not be relied upon for any purpose other than review of the current state of development.
Solutions
+
Start to list tools that are available that can help get to each level
Identify and switch off those zombie servers that aren’t doing anything (or anything much). Remember, this alone saved VMWare 66% on their emissions when they moved one DC in Singapore.
+
Do a one-off right-sizing exercise on all your servers because everything tends to be overprovisioned to start with.
+
Are you turning off your test systems in the evening and on weekends?
+
Because of its extreme multi-tenancy, the cloud already uses only a fraction of the electricity of an on prem DC. AWS claims to be 3.4 times more energy efficient than an average US DC and 5 times more efficient than a European one. Move some stuff there. (Note - you could also call on your non-cloud hosting providers to be more efficient. That isn’t likely to pay off inside 6 months but you need to play the long game if you want to stay out of the cloud).
+
If you are already in the cloud, review your instance types. Could you be using Burstable instances or autoscaling?
+
+
Pini Reznik of GreenOps consultancy re:cinq told us that, in his experience, "An average cloud system can cut its resource consumption by up to 50% just using ops best practice tuning and optimization." This is relatively straightforward stuff.
+
You can measure the scale of cut you’ve achieved by the reduction in your like-for-like hosting bills. Hosting cost is only a rough proxy for emissions but it’s good enough at this stage and it’s simple to explain and track. No clever tools required!
+
Hurray! You’ve saved loads of money and you are now working on level 2 of the maturity matrix.
Make sure your hosting provider or operations team has extremely tough carbon zero hosting targets. Compare them with the cloud and pile on some pressure.
+
Ensure machines are hosted on grids and in regions with a high renewable or nuclear mix (AWS currently has 19 100% renewable regions, for example).
+
Choose only green platforms that are committed to a low carbon future and have a community that will hold them to that commitment. Move to those platforms if necessary.
+
Choose an architecture that will support demand shifting and shaping (i.e. usually not on demand monoliths).
+
Set high bars for operational efficiency and machine utilization because the best way to both cut emissions and embodied carbon is to use fewer servers. The public clouds are comparatively very efficient. Again, that is because of scale and incentives rather than saintliness. We don’t care. In most cases we can cut our emissions very significantly by moving to a public cloud and using its services well (‘lift and shift’ buys you something but you can move beyond it).
+
Design products and systems to support demand shaping and shifting for carbon awareness.
+
Do less and be LEAN in approach. Don’t build and save stuff before need.
+
Make sure your software is never the final nail in the coffin for working end user devices because of the lack of backwards compatibility or security patches.
+
Build basic performance metrics into your systems and do at least basic performance analysis. Resolve any egregious bottlenecks that you find (and you will). They are just bugs that are slowing you down, costing you money and emitting greenhouse gasses. Performance is often a good proxy for carbon emissions.
+
Start to automate the right-sizing you did at level 1 and look at LightswitchOps so you can turn off systems at will if you think they are no longer used. You’ll need some simple metrics for that too so you can spot low activity servers.
+
For code that has to run on demand, make it efficient.