diff --git a/docs/_site/assets/css/just-the-docs-dark.css.map b/docs/_site/assets/css/just-the-docs-dark.css.map index a8f9c10e..04f78428 100644 --- a/docs/_site/assets/css/just-the-docs-dark.css.map +++ b/docs/_site/assets/css/just-the-docs-dark.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/vendor/OneLightJekyll/syntax.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/vendor/OneDarkJekyll/syntax.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/vendor/normalize.scss/normalize.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/base.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/color_schemes/dark.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/support/mixins/_typography.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/support/mixins/_layout.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/support/_variables.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/layout.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/content.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/navigation.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/typography.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/labels.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/buttons.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/support/mixins/_buttons.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/search.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/tables.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/code.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/utilities/_colors.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/utilities/_layout.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/utilities/_typography.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/utilities/_lists.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/utilities/_spacing.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/print.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/skiptomain.scss","just-the-docs-dark.scss","../../_sass/custom/setup.scss"],"names":[],"mappings":";AAEA;AAAA;EAEE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AC5MF;AAAA;EAEE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AA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X;EESJ;IAUI;;;;AAQJ;EFhBE,eCuDK;EDtDL,cCsDK;ECpCL,aDoCK;ECnCL,gBDmCK;;ADlEH;EE2BJ;IFZI,eCqDG;IDpDH,cCoDG;;;ADpEH;EE2BJ;IAOI,aDkCG;ICjCH,gBDiCG;;;;AC7BP;EACE;EACA;EACA,kBDtBY;;ADpBV;EEuCJ;IAMI;IACA;IACA,QD2CY;IC1CZ,kBD5BU;IC6BV;;;AAGF;EACE;;AFrDA;EEoDF;IAII;;;;AAKN;AAAA;AAAA;EAGE;;AFhEE;EE6DJ;AAAA;AAAA;IAMI,ODiBQ;;;;ACbZ;EACE;;AAEA;EACE;;AF3EA;EEuEJ;IAQI;IACA,aDVG;ICWH,gBDfG;ICgBH;IACA;;;;AAIJ;EACE;EACA,YDCc;ECAd;;AF1FE;EEuFJ;IAMI,QDHY;ICIZ,YDJY;ICKZ;;;;AAIJ;EFxFE,eCuDK;EDtDL,cCsDK;ECoCL;EACA;EACA;EACA;EACA,aDzCK;EC0CL,gBD1CK;EC2CL,ODvFY;EFMZ;;AC3BE;EEmGJ;IFpFI,eCqDG;IDpDH,cCoDG;;;ADpEH;EEmGJ;IHrEI;IACA,aEpCuB;;;ADKvB;EEmGJ;IAaI,aDhDG;ICiDH,gBDjDG;;;;ACsDL;EACE;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA,SDjEK;ECkEL;;;AFpIE;EEwIF;IACE;;;AAIJ;EACE;;;AAQF;EACE;;;AASF;EACE;EACA,gBD1FM;EC2FN;;AFnKE;EEgKJ;IAMI;IACA;;;;AAMJ;EFlKE,eCuDK;EDtDL,cCsDK;EC8GL;EACA;EACA;EACA,aDjHK;ECkHL,gBDlHK;ECmHL,ODrKY;EFrBZ;;ACKE;EE6KJ;IF9JI,eCqDG;IDpDH,cCoDG;;;ADpEH;EE6KJ;IH/KI;;;ACEA;EE6KJ;IAYI;IACA;;;;AAIJ;EACE,OD5HK;EC6HL,QD7HK;EC8HL,ODpKS;;;AEtCX;EACE,aFEoB;;AEApB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE;;AAGF;EACE;EACA;;AAGF;AAAA;EAEE;;AAIA;EACE,YF+CC;;AE3CL;EACE;EACA;;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA,OFfM;EEgBN;EACA;EJ9BN;;ACHE;EG2BE;IJrBF;;;ACNA;EG2BE;IAUI;;;AAIJ;EACE;;AAGE;EACE;EACA;;AAOV;EACE;;AAGE;EACE;EACA;EACA,OF7CM;EE8CN;;AAMJ;EACE;;AAIJ;EACE;EACA;;AAKF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;AAAA;EAEE;;AAGF;EACE;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;;AAmBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AASF;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;;AAKN;EACE;EACA;EACA,OFnFG;EEoFH;EACA,eFzFG;EE0FH,cF1FG;EE2FH;;AH1JA;EGmJF;IAUI;IACA;;;AAGF;EACE;EACA;EACA;EACA,OFxIK;EEyIL;;AAYF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AAIJ;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAKE;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAWE,YF9JG;;;AG3EP;EACE;EACA;EACA;EACA;;AAEA;ELgBA;EKbE;EACA;;AJCA;EILF;ILmBE;;;ACdA;EILF;ILQA;;;ACHE;EILF;ILWE;;;AKDA;EACE;EACA,YH+DC;EG9DD,aHuDC;EGtDD,gBHsDC;EGrDD;EAEE,eH0DD;EGzDC,cHqDD;;ADlEH;EIKA;IAeI,YHgDD;IG/CC;IAEE,eH6CH;IG5CG,cH4CH;;;AGrCD;EACE,OHkCD;EGjCC,QHiCD;EGhCC;;AAGF;EACE;EACA;;AAGF;EAEE;;AASJ;EACE;EAEE;EAGF,OHWC;EGVD,QHUC;EGTD;EACA,OHjCK;;AD7BP;EIqDA;IAYI,OHGD;IGFC,QHED;IGDC;;;AAGF;EACE;;AAQA;EACE;;AAKN;EACE;EACA,cHtBC;EGuBD;;AAEA;EACE;;AAEA;EACE,OH9EI;;AGiFN;EACE,OHlFI;;AGwFR;EAEI;;AAMJ;EACE;;;AAMR;EACE;EACA;EACA;EACA;EACA;ELjIA;;ACKE;EIuHJ;ILzHI;;;ACEA;EIuHJ;IASI;IACA,YH/DG;IGgEH;;EAEA;IACE;;;;AAMJ;EACE;;AAEA;EACE;;AAGE;EACE,OHtHC;;AGyHH;EACE,OH1HC;;;AGmIX;EACE;EACA;ELvKA;;ACKE;EIgKJ;ILlKI;;;AKuKF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AJjLA;EIgKJ;IAqBI,eHnHG;;;;ADlEH;EI2LJ;IAEI;;;;AAIJ;EACE;EACA,eHlIK;EGmIL;;;AAGF;EACE;EL7MA;;ACKE;EIuMJ;ILzMI;;;AK6MF;EACE;;AAGF;EACE;EACA,cHjJG;EGkJH,aHlJG;EGmJH,OHnMU;EGoMV;;AAIA;EACE;;;ACpON;AAAA;ENwDE;EACA,aEnDyB;EIFzB;;ALOE;EKXJ;AAAA;IN4DI;;;;AMrDJ;AAAA;AAAA;EN+BE;;AC3BE;EKJJ;AAAA;AAAA;INkCI;IACA,aEpCuB;;;;AIO3B;AAAA;ENiBE;;ACnBE;EKEJ;AAAA;INoBI;;;;AMfJ;AAAA;ENZE;EMgBA;EACA;EACA;;ALbE;EKOJ;AAAA;INTI;;;;AMkBJ;EACE;;;AAGF;AAAA;ENjBE;;ACHE;EKoBJ;AAAA;INdI;;;;AMmBJ;AAAA;EN9BE;;ACKE;EKyBJ;AAAA;IN3BI;;;;AMgCJ;ENnCE;;ACKE;EK8BJ;INhCI;;;;AMoCJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;ACvDF;AAAA;EAEE;EACA;EACA,cLoEK;EKnEL,aLmEK;EKlEL,OLiBM;EKhBN;EACA;EACA,kBL6BS;EFnCT;EOSA;;ANJE;EMRJ;AAAA;IPMI;;;;AOSJ;EACE,kBL2BU;;;AKxBZ;EACE,kBLcW;;;AKXb;EACE,kBL2BQ;;;AKxBV;EACE,OLFY;EKGZ,kBLkBW;;;AMlDb;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,ON+BS;EM9BT;EACA;EACA;EACA,kBNiBY;EMhBZ;EACA,eNyEc;EMxEd,YACE;EAEF;;AAEA;EACE;EACA;EACA;;AAGF;EAEE;;AAGF;EAEE;;AAGF;EAIE;EACA;;AAGF;EAGE;EACA;EACA;;AAGF;EACE;;AAKA;EAEE;EACA;EACA;EACA;EACA;;;AAKN;EACE,ON/BS;EMgCT;EACA;;AAEA;EAIE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA,YACE;;AAIJ;EAEE;;;AAIJ;ECnGE,OP0BM;EOzBN;EACA;EACA,YACE;;AAGF;EAEE,OPiBI;EOhBJ;EACA;;AAGF;EAGE;EACA;EACA;;AAGF;EACE;;;ADgFJ;ECvGE,OP0BM;EOzBN;EACA;EACA,YACE;;AAGF;EAEE,OPiBI;EOhBJ;EACA;;AAGF;EAGE;EACA;EACA;;AAGF;EACE;;;ADoFJ;EC3GE,OP0BM;EOzBN;EACA;EACA,YACE;;AAGF;EAEE,OPiBI;EOhBJ;EACA;;AAGF;EAGE;EACA;EACA;;AAGF;EACE;;;ADwFJ;EC/GE,OP0BM;EOzBN;EACA;EACA,YACE;;AAGF;EAEE,OPiBI;EOhBJ;EACA;;AAGF;EAGE;EACA;EACA;;AAGF;EACE;;;AD4FJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AE3HF;EACE;EACA;EACA;EACA,QRgFM;EQ/EN,SRuEK;EQtEL;;ATME;ESZJ;IASI;IACA;IACA;IACA;IACA;;;;AAIJ;EACE;EACA;EACA,QR8DK;EQ7DL;EACA,eRmEc;EQlEd,YACE;EAEF;;ATdE;ESKJ;IAYI;IACA;IACA,WRwEmB;IQvEnB;IACA;IACA;IACA;;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA,ORTY;EQUZ,kBRfY;EQgBZ;EACA;EACA;EACA;EACA;;ATvCE;ES2BJ;IAeI;IACA;IACA,kBRxBU;IQyBV;;;AAGF;EACE;;AAEA;EACE,ORvBK;;;AQ4BX;EACE;EACA;EACA;EACA,cRKK;;ADlEH;ESyDJ;IAOI,cRIG;IQHH;;;AAGF;EACE;EACA;EACA;EACA,ORxDU;;;AQ4Dd;EACE;EACA;EACA;EACA;EACA;EACA;EACA,kBRhEY;EQiEZ,4BRPc;EQQd,2BRRc;EQSd,YACE;;ATvFA;ES4EJ;IAeI;IACA,ORDmB;IQEnB;;;;AAIJ;EACE;EACA,eRpCK;EQqCL;EVzFA;;ACXE;ESiGJ;IVnFI;;;ACdA;ESiGJ;IV9FE;;;ACHE;ESiGJ;IV3FI;;;;AUsGJ;EACE;EACA;;;AAGF;EACE;EACA;;AAEA;EAEE,kBX1Ha;;;AW8HjB;EACE;EACA,aR7DK;EQ8DL,gBR9DK;;ADhEH;ES2HJ;IAMI;IACA;IACA,eRnEG;IQoEH;;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;EV3IF;;ACHE;ES6IF;IVvIE;;;ACNA;ES6IF;IVlJA;;;ACKE;ES6IF;IV/IE;;;AUwJF;EACE,ORrFG;EQsFH,QRtFG;EQuFH,cRzFG;EQ0FH,OR7HO;EQ8HP;;AAGF;EACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA,OR5JY;EQ6JZ;EACA;EV3LA;;ACaE;ESwKJ;IVlLI;;;;AU4LJ;EACE;EACA,aRpHK;EQqHL,gBRrHK;EQsHL,cRpHK;EQqHL,aRvHK;EQwHL,ORxKY;EQyKZ;EACA,aR9GO;EQ+GP,mBRzKY;EFvBZ;;ACKE;ESkLJ;IVpLI;;;ACEA;ESkLJ;IAaI;IACA;IACA,cRjIG;IQkIH;IACA;;;;AAIJ;EACE,YRzIK;;;AQ4IP;EACE;;;AAGF;EACE;EV7MA;;ACHE;ES+MJ;IVzMI;;;;AU8MJ;EACE;EACA,ORpJK;EQqJL,QRrJK;EQsJL;EACA,ORlJK;EQmJL,QRnJK;EQoJL,kBRxMY;EQyMZ;EACA;EACA,YACE;EAEF;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE,QRvLI;EQwLJ;;AThQA;ES8PF;IAKI,ORxKiB;IQyKjB,YACE;;;AAKN;EACE,kBRxPU;;ADnBV;ES0QF;IAII;;;AT9QF;ESkRF;IAEI;;;AAIJ;EACE;;AAGF;EACE;EACA;EACA;EACA,YACE;;ATjSF;ESuSA;IACE;IACA;IACA;;;AAIJ;EACE,aRvOI;;ADxEJ;ES8SF;IAII;;;;AC7TN;EACE;EACA;EACA;EACA,eT0EK;ESzEL;EACA,eTkFc;ESjFd,YACE;;;AAIJ;EACE;EACA;EACA;;;AAGF;AAAA;EXJE;EWQA;EACA;EACA,kBTMY;ESLZ;EACA;;AVfE;EUOJ;AAAA;IXDI;;;AWWF;AAAA;EACE;;;AAOE;AAAA;EAEE;;AAGF;EACE,gBTkCD;;;AS3BL;EACE;;;AC9CF;EACE;EACA;EACA,kBbDoB;EaEpB;EACA,eV+EY;;;AU1EhB;EACE,cVcY;;;AUqCd;AAAA;AAAA;EAGE;EACA,eVMK;EULL,kBbjEsB;EakEtB,eVgBc;EUfd;EACA;EACA;EACA;;AAIA;AAAA;AAAA;EACE,OVLG;EUMH;EACA;EACA;EACA;EACA;EACA,kBbjFoB;EakFpB,OVrDU;EUsDV;;AAEA;AAAA;AAAA;EACE,MVzDQ;;AU4DV;AAAA;AAAA;EACE;EACA;EACA;;AAGF;AAAA;AAAA;EACE;;AAMF;AAAA;AAAA;EACE;EACA;;;AASJ;EACE;EACA,SV7CG;EU8CH;EACA;;AAGF;AAAA;EAEE;EACA;EACA;;;AAUJ;EAGE;EACA,eVpEK;;AU2CL;EACE;EACA,SV7CG;EU8CH;EACA;;AAGF;AAAA;EAEE;EACA;EACA;;;AAwBF;AAAA;EAEE;EACA,SVjFG;EUkFH;EACA;;;AAQJ;EACE;EACA;EACA;EACA;;AAEA;AAAA;EZvKA;EY2KE;EACA;EACA,kBb7KoB;Ea8KpB;;AXzKA;EWkKF;AAAA;IZpKE;;;AY8KF;EACE;EACA,eV7GG;EU8GH,cV9GG;;AUiHL;EACE;EACA;;;AAKJ;AAAA;EAEE,SV1HK;EU2HL,eV3HK;EU4HL;EACA;EACA,eVlHc;;AUoHd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAIE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKJ;EACE;EACA;EACA;;;AAIF;AAAA;EAEE,Yb9NsB;EaiOpB,ObhOoB;;;AauOxB;EACE,YbzOsB;;;AcLxB;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;ACvOF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AbPE;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAQR;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;ACjGF;EfDE;;ACaE;EcZJ;IfEI;;;;AeEJ;EfGE;;ACKE;EcRJ;IfMI;;;;AeFJ;EfOE;;ACHE;EcJJ;IfUI;;;;AeNJ;EfWE;;ACXE;EcAJ;IfcI;;;;AeVJ;EfeE;;ACnBE;EcIJ;IfkBI;;;;AedJ;EfmBE;;AC3BE;EcQJ;IfsBI;IACA,aEpCuB;;;;AaiB3B;EfwBE;EACA,aE1CyB;;ADKvB;EcYJ;If4BI;;;;AexBJ;Ef6BE;EACA,aEnDyB;;ADKvB;EcgBJ;IfiCI;;;;Ae7BJ;EfkCE;EACA,aE5DyB;;ADKvB;EcoBJ;IfsCI;;;;AelCJ;EfuCE;EACA,aErEyB;;ADKvB;EcwBJ;If2CI;;;;AevCJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE,abxDiB;;;Aa2DnB;EACE,ab1DyB;;;Aa6D3B;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AC/EF;EACE;EACA;EACA;;AAGE;EACE;;;ACLN;EACE;EACA;;;AAQA;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AhBlCA;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AAaN;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AhB7GA;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AC3JR;EACE;AAAA;AAAA;AAAA;AAAA;AAAA;IAME;;EAGF;IACE;IACA;IACA;;EAGF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;IACA;;;AClCJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE,OjB4BS;EiB3BT,kBjBkBY;EiBjBZ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AClBF;EACE,kBlBuBY;;;AkBtBb;EACG;EACA;EACA,elB4EY;EkB3EZ;EACA;;AAEA;EACI,OlB+BK;EkB9BL;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlBqBO;EkBpBP;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBiDY;EkBhDZ;EACA;;AACA;EACE;EACA;EACA,OlBGO;EkBFP;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACI;EACA;EACA,elBKY;EkBJZ;EACA;;AAEA;EACI,OlBpCE;EkBqCF;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlB9CI;EkB+CJ;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBtBY;EkBuBZ;EACA;;AACA;EACE;EACA;EACA,OlBhEI;EkBiEJ;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACI;EACA;EACA,elBlEY;EkBmEZ;EACA;;AAEA;EACI,OClKM;EDmKN;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OC5KQ;ED6KR;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elB7FY;EkB8FZ;EACA;;AACA;EACE;EACA;EACA,OC9LQ;ED+LR;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE","sourcesContent":["// Generated with OneLightJekyll applied to Atom's One Light theme\n\n.highlight,\npre.highlight {\n background: #f9f9f9;\n color: #383942;\n}\n.highlight pre {\n background: #f9f9f9;\n}\n.highlight .hll {\n background: #f9f9f9;\n}\n.highlight .c {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .err {\n color: #fff;\n background-color: #e05151;\n}\n.highlight .k {\n color: #a625a4;\n}\n.highlight .l {\n color: #50a04f;\n}\n.highlight .n {\n color: #383942;\n}\n.highlight .o {\n color: #383942;\n}\n.highlight .p {\n color: #383942;\n}\n.highlight .cm {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .cp {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .c1 {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .cs {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .ge {\n font-style: italic;\n}\n.highlight .gs {\n font-weight: 700;\n}\n.highlight .kc {\n color: #a625a4;\n}\n.highlight .kd {\n color: #a625a4;\n}\n.highlight .kn {\n color: #a625a4;\n}\n.highlight .kp {\n color: #a625a4;\n}\n.highlight .kr {\n color: #a625a4;\n}\n.highlight .kt {\n color: #a625a4;\n}\n.highlight .ld {\n color: #50a04f;\n}\n.highlight .m {\n color: #b66a00;\n}\n.highlight .s {\n color: #50a04f;\n}\n.highlight .na {\n color: #b66a00;\n}\n.highlight .nb {\n color: #ca7601;\n}\n.highlight .nc {\n color: #ca7601;\n}\n.highlight .no {\n color: #ca7601;\n}\n.highlight .nd {\n color: #ca7601;\n}\n.highlight .ni {\n color: #ca7601;\n}\n.highlight .ne {\n color: #ca7601;\n}\n.highlight .nf {\n color: #383942;\n}\n.highlight .nl {\n color: #ca7601;\n}\n.highlight .nn {\n color: #383942;\n}\n.highlight .nx {\n color: #383942;\n}\n.highlight .py {\n color: #ca7601;\n}\n.highlight .nt {\n color: #e35549;\n}\n.highlight .nv {\n color: #ca7601;\n}\n.highlight .ow {\n font-weight: 700;\n}\n.highlight .w {\n color: #f8f8f2;\n}\n.highlight .mf {\n color: #b66a00;\n}\n.highlight .mh {\n color: #b66a00;\n}\n.highlight .mi {\n color: #b66a00;\n}\n.highlight .mo {\n color: #b66a00;\n}\n.highlight .sb {\n color: #50a04f;\n}\n.highlight .sc {\n color: #50a04f;\n}\n.highlight .sd {\n color: #50a04f;\n}\n.highlight .s2 {\n color: #50a04f;\n}\n.highlight .se {\n color: #50a04f;\n}\n.highlight .sh {\n color: #50a04f;\n}\n.highlight .si {\n color: #50a04f;\n}\n.highlight .sx {\n color: #50a04f;\n}\n.highlight .sr {\n color: #0083bb;\n}\n.highlight .s1 {\n color: #50a04f;\n}\n.highlight .ss {\n color: #0083bb;\n}\n.highlight .bp {\n color: #ca7601;\n}\n.highlight .vc {\n color: #ca7601;\n}\n.highlight .vg {\n color: #ca7601;\n}\n.highlight .vi {\n color: #e35549;\n}\n.highlight .il {\n color: #b66a00;\n}\n.highlight .gu {\n color: #75715e;\n}\n.highlight .gd {\n color: #e05151;\n}\n.highlight .gi {\n color: #43d089;\n}\n.highlight .language-json .w + .s2 {\n color: #e35549;\n}\n.highlight .language-json .kc {\n color: #0083bb;\n}\n","// Generated with OneDarkJekyll applied to Atom's One Dark Vivid theme\n\n.highlight,\npre.highlight {\n background: #31343f;\n color: #dee2f7;\n}\n.highlight pre {\n background: #31343f;\n}\n.highlight .hll {\n background: #31343f;\n}\n.highlight .c {\n color: #63677e;\n font-style: italic;\n}\n.highlight .err {\n color: #960050;\n background-color: #1e0010;\n}\n.highlight .k {\n color: #e19ef5;\n}\n.highlight .l {\n color: #a3eea0;\n}\n.highlight .n {\n color: #dee2f7;\n}\n.highlight .o {\n color: #dee2f7;\n}\n.highlight .p {\n color: #dee2f7;\n}\n.highlight .cm {\n color: #63677e;\n font-style: italic;\n}\n.highlight .cp {\n color: #63677e;\n font-style: italic;\n}\n.highlight .c1 {\n color: #63677e;\n font-style: italic;\n}\n.highlight .cs {\n color: #63677e;\n font-style: italic;\n}\n.highlight .ge {\n font-style: italic;\n}\n.highlight .gs {\n font-weight: 700;\n}\n.highlight .kc {\n color: #e19ef5;\n}\n.highlight .kd {\n color: #e19ef5;\n}\n.highlight .kn {\n color: #e19ef5;\n}\n.highlight .kp {\n color: #e19ef5;\n}\n.highlight .kr {\n color: #e19ef5;\n}\n.highlight .kt {\n color: #e19ef5;\n}\n.highlight .ld {\n color: #a3eea0;\n}\n.highlight .m {\n color: #eddc96;\n}\n.highlight .s {\n color: #a3eea0;\n}\n.highlight .na {\n color: #eddc96;\n}\n.highlight .nb {\n color: #fdce68;\n}\n.highlight .nc {\n color: #fdce68;\n}\n.highlight .no {\n color: #fdce68;\n}\n.highlight .nd {\n color: #fdce68;\n}\n.highlight .ni {\n color: #fdce68;\n}\n.highlight .ne {\n color: #fdce68;\n}\n.highlight .nf {\n color: #dee2f7;\n}\n.highlight .nl {\n color: #fdce68;\n}\n.highlight .nn {\n color: #dee2f7;\n}\n.highlight .nx {\n color: #dee2f7;\n}\n.highlight .py {\n color: #fdce68;\n}\n.highlight .nt {\n color: #f9867b;\n}\n.highlight .nv {\n color: #fdce68;\n}\n.highlight .ow {\n font-weight: 700;\n}\n.highlight .w {\n color: #f8f8f2;\n}\n.highlight .mf {\n color: #eddc96;\n}\n.highlight .mh {\n color: #eddc96;\n}\n.highlight .mi {\n color: #eddc96;\n}\n.highlight .mo {\n color: #eddc96;\n}\n.highlight .sb {\n color: #a3eea0;\n}\n.highlight .sc {\n color: #a3eea0;\n}\n.highlight .sd {\n color: #a3eea0;\n}\n.highlight .s2 {\n color: #a3eea0;\n}\n.highlight .se {\n color: #a3eea0;\n}\n.highlight .sh {\n color: #a3eea0;\n}\n.highlight .si {\n color: #a3eea0;\n}\n.highlight .sx {\n color: #a3eea0;\n}\n.highlight .sr {\n color: #7be2f9;\n}\n.highlight .s1 {\n color: #a3eea0;\n}\n.highlight .ss {\n color: #7be2f9;\n}\n.highlight .bp {\n color: #fdce68;\n}\n.highlight .vc {\n color: #fdce68;\n}\n.highlight .vg {\n color: #fdce68;\n}\n.highlight .vi {\n color: #f9867b;\n}\n.highlight .il {\n color: #eddc96;\n}\n.highlight .gu {\n color: #75715e;\n}\n.highlight .gd {\n color: #f92672;\n}\n.highlight .gi {\n color: #a6e22e;\n}\n","/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput {\n /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect {\n /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// Base element style overrides\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\n:root {\n color-scheme: $color-scheme;\n}\n\n* {\n box-sizing: border-box;\n}\n\nhtml {\n @include fs-4;\n\n scroll-behavior: smooth;\n}\n\nbody {\n font-family: $body-font-family;\n font-size: inherit;\n line-height: $body-line-height;\n color: $body-text-color;\n background-color: $body-background-color;\n overflow-wrap: break-word;\n}\n\nol,\nul,\ndl,\npre,\naddress,\nblockquote,\ntable,\ndiv,\nhr,\nform,\nfieldset,\nnoscript .table-wrapper {\n margin-top: 0;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n#toctitle {\n margin-top: 0;\n margin-bottom: 1em;\n font-weight: 500;\n line-height: $body-heading-line-height;\n color: $body-heading-color;\n}\n\np {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n\na {\n color: $link-color;\n text-decoration: none;\n}\n\na:not([class]) {\n text-decoration: underline;\n text-decoration-color: $border-color;\n text-underline-offset: 2px;\n\n &:hover {\n text-decoration-color: rgba($link-color, 0.45);\n }\n}\n\ncode {\n font-family: $mono-font-family;\n font-size: 0.75em;\n line-height: $body-line-height;\n}\n\nfigure,\npre {\n margin: 0;\n}\n\nli {\n margin: 0.25em 0;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\nhr {\n height: 1px;\n padding: 0;\n margin: $sp-6 0;\n background-color: $border-color;\n border: 0;\n}\n\n// adds a GitHub-style sidebar to blockquotes\nblockquote {\n margin: 10px 0;\n\n // resets user-agent stylesheets for blockquotes\n margin-block-start: 0;\n margin-inline-start: 0;\n padding-left: 1rem;\n border-left: 3px solid $border-color;\n}\n","$color-scheme: dark;\n$body-background-color: $grey-dk-300;\n$body-heading-color: $grey-lt-000;\n$body-text-color: $grey-lt-300;\n$link-color: $blue-000;\n$nav-child-link-color: $grey-dk-000;\n$sidebar-color: $grey-dk-300;\n$base-button-color: $grey-dk-250;\n$btn-primary-color: $blue-200;\n$code-background-color: #31343f; // OneDarkJekyll default for syntax-one-dark-vivid\n$code-linenumber-color: #dee2f7; // OneDarkJekyll .nf for syntax-one-dark-vivid\n$feedback-color: darken($sidebar-color, 3%);\n$table-background-color: $grey-dk-250;\n$search-background-color: $grey-dk-250;\n$search-result-preview-color: $grey-dk-000;\n$border-color: $grey-dk-200;\n\n@import \"./vendor/OneDarkJekyll/syntax\"; // this is the one-dark-vivid atom syntax theme\n","@mixin fs-1 {\n font-size: $font-size-1 !important;\n\n @include mq(sm) {\n font-size: $font-size-1-sm !important;\n }\n}\n\n@mixin fs-2 {\n font-size: $font-size-2 !important;\n\n @include mq(sm) {\n font-size: $font-size-3 !important;\n }\n}\n\n@mixin fs-3 {\n font-size: $font-size-3 !important;\n\n @include mq(sm) {\n font-size: $font-size-4 !important;\n }\n}\n\n@mixin fs-4 {\n font-size: $font-size-4 !important;\n\n @include mq(sm) {\n font-size: $font-size-5 !important;\n }\n}\n\n@mixin fs-5 {\n font-size: $font-size-5 !important;\n\n @include mq(sm) {\n font-size: $font-size-6 !important;\n }\n}\n\n@mixin fs-6 {\n font-size: $font-size-6 !important;\n\n @include mq(sm) {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n}\n\n@mixin fs-7 {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-8 !important;\n }\n}\n\n@mixin fs-8 {\n font-size: $font-size-8 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-9 !important;\n }\n}\n\n@mixin fs-9 {\n font-size: $font-size-9 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-10 !important;\n }\n}\n\n@mixin fs-10 {\n font-size: $font-size-10 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-10-sm !important;\n }\n}\n","// Media query\n\n// Media query mixin\n// Usage:\n// @include mq(md) {\n// ..medium and up styles\n// }\n@mixin mq($name) {\n // Retrieves the value from the key\n $value: map-get($media-queries, $name);\n\n // If the key exists in the map\n @if $value {\n // Prints a media query based on the value\n @media (min-width: $value) {\n @content;\n }\n } @else {\n @warn \"No value could be retrieved from `#{$media-query}`. Please make sure it is defined in `$media-queries` map.\";\n }\n}\n\n// Responsive container\n\n@mixin container {\n padding-right: $gutter-spacing-sm;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-right: $gutter-spacing;\n padding-left: $gutter-spacing;\n }\n}\n","// Typography\n\n// prettier-ignore\n$body-font-family: system-ui, -apple-system, blinkmacsystemfont, \"Segoe UI\",\n roboto, \"Helvetica Neue\", arial, sans-serif, \"Segoe UI Emoji\" !default;\n$mono-font-family: \"SFMono-Regular\", menlo, consolas, monospace !default;\n$root-font-size: 16px !default; // DEPRECATED: previously base font-size for rems\n$body-line-height: 1.4 !default;\n$content-line-height: 1.6 !default;\n$body-heading-line-height: 1.25 !default;\n\n// Font size\n// `-sm` suffix is the size at the small (and above) media query\n\n$font-size-1: 0.5625rem !default;\n$font-size-1-sm: 0.625rem !default;\n$font-size-2: 0.6875rem !default; // h4 - uppercased!, h6 not uppercased, text-small\n$font-size-3: 0.75rem !default; // h5\n$font-size-4: 0.875rem !default;\n$font-size-5: 1rem !default; // h3\n$font-size-6: 1.125rem !default; // h2\n$font-size-7: 1.5rem !default;\n$font-size-8: 2rem !default; // h1\n$font-size-9: 2.25rem !default;\n$font-size-10: 2.625rem !default;\n$font-size-10-sm: 3rem !default;\n\n// Colors\n\n$white: #fff !default;\n$grey-dk-000: #959396 !default;\n$grey-dk-100: #5c5962 !default;\n$grey-dk-200: #44434d !default;\n$grey-dk-250: #302d36 !default;\n$grey-dk-300: #27262b !default;\n$grey-lt-000: #f5f6fa !default;\n$grey-lt-100: #eeebee !default;\n$grey-lt-200: #ecebed !default;\n$grey-lt-300: #e6e1e8 !default;\n$purple-000: #7253ed !default;\n$purple-100: #5e41d0 !default;\n$purple-200: #4e26af !default;\n$purple-300: #381885 !default;\n$blue-000: #2c84fa !default;\n$blue-100: #2869e6 !default;\n$blue-200: #264caf !default;\n$blue-300: #183385 !default;\n$green-000: #41d693 !default;\n$green-100: #11b584 !default;\n$green-200: #009c7b !default;\n$green-300: #026e57 !default;\n$yellow-000: #ffeb82 !default;\n$yellow-100: #fadf50 !default;\n$yellow-200: #f7d12e !default;\n$yellow-300: #e7af06 !default;\n$red-000: #f77e7e !default;\n$red-100: #f96e65 !default;\n$red-200: #e94c4c !default;\n$red-300: #dd2e2e !default;\n\n// Spacing\n\n$spacing-unit: 1rem; // 1rem == 16px\n\n$spacers: (\n sp-0: 0,\n sp-1: $spacing-unit * 0.25,\n sp-2: $spacing-unit * 0.5,\n sp-3: $spacing-unit * 0.75,\n sp-4: $spacing-unit,\n sp-5: $spacing-unit * 1.5,\n sp-6: $spacing-unit * 2,\n sp-7: $spacing-unit * 2.5,\n sp-8: $spacing-unit * 3,\n sp-9: $spacing-unit * 3.5,\n sp-10: $spacing-unit * 4,\n) !default;\n$sp-1: map-get($spacers, sp-1) !default; // 0.25 rem == 4px\n$sp-2: map-get($spacers, sp-2) !default; // 0.5 rem == 8px\n$sp-3: map-get($spacers, sp-3) !default; // 0.75 rem == 12px\n$sp-4: map-get($spacers, sp-4) !default; // 1 rem == 16px\n$sp-5: map-get($spacers, sp-5) !default; // 1.5 rem == 24px\n$sp-6: map-get($spacers, sp-6) !default; // 2 rem == 32px\n$sp-7: map-get($spacers, sp-7) !default; // 2.5 rem == 40px\n$sp-8: map-get($spacers, sp-8) !default; // 3 rem == 48px\n$sp-9: map-get($spacers, sp-9) !default; // 3.5 rem == 56px\n$sp-10: map-get($spacers, sp-10) !default; // 4 rem == 64px\n\n// Borders\n\n$border: 1px solid !default;\n$border-radius: 4px !default;\n$border-color: $grey-lt-100 !default;\n\n// Grid system\n\n$gutter-spacing: $sp-6 !default;\n$gutter-spacing-sm: $sp-4 !default;\n$nav-width: 16.5rem !default;\n$nav-width-md: 15.5rem !default;\n$nav-list-item-height: $sp-6 !default;\n$nav-list-item-height-sm: $sp-8 !default;\n$nav-list-expander-right: true;\n$content-width: 50rem !default;\n$header-height: 3.75rem !default;\n$search-results-width: $content-width - $nav-width !default;\n$transition-duration: 400ms;\n\n// Media queries in pixels\n\n$media-queries: (\n xs: 20rem,\n sm: 31.25rem,\n md: $content-width,\n lg: $content-width + $nav-width,\n xl: 87.5rem,\n) !default;\n","// The basic two column layout\n\n.side-bar {\n z-index: 0;\n display: flex;\n flex-wrap: wrap;\n background-color: $sidebar-color;\n\n @include mq(md) {\n flex-flow: column nowrap;\n position: fixed;\n width: $nav-width-md;\n height: 100%;\n border-right: $border $border-color;\n align-items: flex-end;\n }\n\n @include mq(lg) {\n width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});\n min-width: $nav-width;\n }\n}\n\n.main {\n @include mq(md) {\n position: relative;\n max-width: $content-width;\n margin-left: $nav-width-md;\n }\n\n @include mq(lg) {\n // stylelint-disable function-name-case\n // disable for Max(), we want to use the CSS max() function\n margin-left: Max(\n #{$nav-width},\n calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width})\n );\n // stylelint-enable function-name-case\n }\n}\n\n.main-content-wrap {\n @include container;\n\n padding-top: $gutter-spacing-sm;\n padding-bottom: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-top: $gutter-spacing;\n padding-bottom: $gutter-spacing;\n }\n}\n\n.main-header {\n z-index: 0;\n display: none;\n background-color: $sidebar-color;\n\n @include mq(md) {\n display: flex;\n justify-content: space-between;\n height: $header-height;\n background-color: $body-background-color;\n border-bottom: $border $border-color;\n }\n\n &.nav-open {\n display: block;\n\n @include mq(md) {\n display: flex;\n }\n }\n}\n\n.site-nav,\n.site-header,\n.site-footer {\n width: 100%;\n\n @include mq(lg) {\n width: $nav-width;\n }\n}\n\n.site-nav {\n display: none;\n\n &.nav-open {\n display: block;\n }\n\n @include mq(md) {\n display: block;\n padding-top: $sp-8;\n padding-bottom: $gutter-spacing-sm;\n overflow-y: auto;\n flex: 1 1 auto;\n }\n}\n\n.site-header {\n display: flex;\n min-height: $header-height;\n align-items: center;\n\n @include mq(md) {\n height: $header-height;\n max-height: $header-height;\n border-bottom: $border $border-color;\n }\n}\n\n.site-title {\n @include container;\n\n flex-grow: 1;\n display: flex;\n height: 100%;\n align-items: center;\n padding-top: $sp-3;\n padding-bottom: $sp-3;\n color: $body-heading-color;\n @include fs-6;\n\n @include mq(md) {\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n }\n}\n\n@if variable-exists(logo) {\n .site-logo {\n width: 100%;\n height: 100%;\n background-image: url($logo);\n background-repeat: no-repeat;\n background-position: left center;\n background-size: contain;\n }\n}\n\n.site-button {\n display: flex;\n height: 100%;\n padding: $gutter-spacing-sm;\n align-items: center;\n}\n\n@include mq(md) {\n .site-header .site-button {\n display: none;\n }\n}\n\n.site-title:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n}\n\n.site-button:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n}\n\n// stylelint-disable selector-max-type\n\nbody {\n position: relative;\n padding-bottom: $sp-10;\n overflow-y: scroll;\n\n @include mq(md) {\n position: static;\n padding-bottom: 0;\n }\n}\n\n// stylelint-enable selector-max-type\n\n.site-footer {\n @include container;\n\n position: absolute;\n bottom: 0;\n left: 0;\n padding-top: $sp-4;\n padding-bottom: $sp-4;\n color: $grey-dk-000;\n @include fs-2;\n\n @include mq(md) {\n position: static;\n justify-self: end;\n }\n}\n\n.icon {\n width: $sp-5;\n height: $sp-5;\n color: $link-color;\n}\n","@charset \"UTF-8\";\n\n// Styles for rendered markdown in the .main-content container\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity, selector-max-id\n\n.main-content {\n line-height: $content-line-height;\n\n ol,\n ul,\n dl,\n pre,\n address,\n blockquote,\n .table-wrapper {\n margin-top: 0.5em;\n }\n\n a {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n ul,\n ol {\n padding-left: 1.5em;\n }\n\n li {\n .highlight {\n margin-top: $sp-1;\n }\n }\n\n ol {\n list-style-type: none;\n counter-reset: step-counter;\n\n > li {\n position: relative;\n\n &::before {\n position: absolute;\n top: 0.2em;\n left: -1.6em;\n color: $grey-dk-000;\n content: counter(step-counter);\n counter-increment: step-counter;\n @include fs-3;\n\n @include mq(sm) {\n top: 0.11em;\n }\n }\n\n ol {\n counter-reset: sub-counter;\n\n > li {\n &::before {\n content: counter(sub-counter, lower-alpha);\n counter-increment: sub-counter;\n }\n }\n }\n }\n }\n\n ul {\n list-style: none;\n\n > li {\n &::before {\n position: absolute;\n margin-left: -1.4em;\n color: $grey-dk-000;\n content: \"•\";\n }\n }\n }\n\n .task-list-item {\n &::before {\n content: \"\";\n }\n }\n\n .task-list-item-checkbox {\n margin-right: 0.6em;\n margin-left: -1.4em;\n\n // The same margin-left is used above for ul > li::before\n }\n\n hr + * {\n margin-top: 0;\n }\n\n h1:first-of-type {\n margin-top: 0.5em;\n }\n\n dl {\n display: grid;\n grid-template: auto / 10em 1fr;\n }\n\n dt,\n dd {\n margin: 0.25em 0;\n }\n\n dt {\n grid-column: 1;\n font-weight: 500;\n text-align: right;\n\n &::after {\n content: \":\";\n }\n }\n\n dd {\n grid-column: 2;\n margin-bottom: 0;\n margin-left: 1em;\n\n blockquote,\n div,\n dl,\n dt,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n li,\n ol,\n p,\n pre,\n table,\n ul,\n .table-wrapper {\n &:first-child {\n margin-top: 0;\n }\n }\n }\n\n dd,\n ol,\n ul {\n dl:first-child {\n dt:first-child,\n dd:nth-child(2) {\n margin-top: 0;\n }\n }\n }\n\n .anchor-heading {\n position: absolute;\n right: -$sp-4;\n width: $sp-5;\n height: 100%;\n padding-right: $sp-1;\n padding-left: $sp-1;\n overflow: visible;\n\n @include mq(md) {\n right: auto;\n left: -$sp-5;\n }\n\n svg {\n display: inline-block;\n width: 100%;\n height: 100%;\n color: $link-color;\n visibility: hidden;\n }\n }\n\n .anchor-heading:hover,\n .anchor-heading:focus,\n h1:hover > .anchor-heading,\n h2:hover > .anchor-heading,\n h3:hover > .anchor-heading,\n h4:hover > .anchor-heading,\n h5:hover > .anchor-heading,\n h6:hover > .anchor-heading {\n svg {\n visibility: visible;\n }\n }\n\n summary {\n cursor: pointer;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n #toctitle {\n position: relative;\n margin-top: 1.5em;\n margin-bottom: 0.25em;\n\n + table,\n + .table-wrapper,\n + .code-example,\n + .highlighter-rouge,\n + .sectionbody .listingblock {\n margin-top: 1em;\n }\n\n + p:not(.label) {\n margin-top: 0;\n }\n }\n\n > h1:first-child,\n > h2:first-child,\n > h3:first-child,\n > h4:first-child,\n > h5:first-child,\n > h6:first-child,\n > .sect1:first-child > h2,\n > .sect2:first-child > h3,\n > .sect3:first-child > h4,\n > .sect4:first-child > h5,\n > .sect5:first-child > h6 {\n margin-top: $sp-2;\n }\n}\n","// Main nav, breadcrumb, etc...\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity\n\n.nav-list {\n padding: 0;\n margin-top: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-list-item {\n @include fs-4;\n\n position: relative;\n margin: 0;\n\n @include mq(md) {\n @include fs-3;\n }\n\n .nav-list-link {\n display: block;\n min-height: $nav-list-item-height-sm;\n padding-top: $sp-1;\n padding-bottom: $sp-1;\n line-height: #{$nav-list-item-height-sm - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height-sm;\n padding-left: $gutter-spacing-sm;\n } @else {\n padding-right: $gutter-spacing-sm;\n padding-left: $nav-list-item-height-sm;\n }\n\n @include mq(md) {\n min-height: $nav-list-item-height;\n line-height: #{$nav-list-item-height - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height;\n padding-left: $gutter-spacing;\n } @else {\n padding-right: $gutter-spacing;\n padding-left: $nav-list-item-height;\n }\n }\n\n &.external > svg {\n width: $sp-4;\n height: $sp-4;\n vertical-align: text-bottom;\n }\n\n &.active {\n font-weight: 600;\n text-decoration: none;\n }\n\n &:hover,\n &.active {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n }\n }\n\n .nav-list-expander {\n position: absolute;\n @if $nav-list-expander-right {\n right: 0;\n }\n\n width: $nav-list-item-height-sm;\n height: $nav-list-item-height-sm;\n padding: #{$nav-list-item-height-sm * 0.25};\n color: $link-color;\n\n @include mq(md) {\n width: $nav-list-item-height;\n height: $nav-list-item-height;\n padding: #{$nav-list-item-height * 0.25};\n }\n\n &:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n }\n\n @if $nav-list-expander-right {\n svg {\n transform: rotate(90deg);\n }\n }\n }\n\n > .nav-list {\n display: none;\n padding-left: $sp-3;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n\n .nav-list-link {\n color: $nav-child-link-color;\n }\n\n .nav-list-expander {\n color: $nav-child-link-color;\n }\n }\n }\n\n &.active {\n > .nav-list-expander svg {\n @if $nav-list-expander-right {\n transform: rotate(-90deg);\n } @else {\n transform: rotate(90deg);\n }\n }\n\n > .nav-list {\n display: block;\n }\n }\n }\n}\n\n.nav-category {\n padding: $sp-2 $gutter-spacing-sm;\n font-weight: 600;\n text-align: start;\n text-transform: uppercase;\n border-bottom: $border $border-color;\n @include fs-2;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing;\n margin-top: $gutter-spacing-sm;\n text-align: start;\n\n &:first-child {\n margin-top: 0;\n }\n }\n}\n\n.nav-list.nav-category-list {\n > .nav-list-item {\n margin: 0;\n\n > .nav-list {\n padding: 0;\n\n > .nav-list-item {\n > .nav-list-link {\n color: $link-color;\n }\n\n > .nav-list-expander {\n color: $link-color;\n }\n }\n }\n }\n}\n\n// Aux nav\n\n.aux-nav {\n height: 100%;\n overflow-x: auto;\n @include fs-2;\n\n .aux-nav-list {\n display: flex;\n height: 100%;\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n .aux-nav-list-item {\n display: inline-block;\n height: 100%;\n padding: 0;\n margin: 0;\n }\n\n @include mq(md) {\n padding-right: $gutter-spacing-sm;\n }\n}\n\n// Breadcrumb nav\n\n.breadcrumb-nav {\n @include mq(md) {\n margin-top: -$sp-4;\n }\n}\n\n.breadcrumb-nav-list {\n padding-left: 0;\n margin-bottom: $sp-3;\n list-style: none;\n}\n\n.breadcrumb-nav-list-item {\n display: table-cell;\n @include fs-2;\n\n &::before {\n display: none;\n }\n\n &::after {\n display: inline-block;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $grey-dk-000;\n content: \"/\";\n }\n\n &:last-child {\n &::after {\n content: \"\";\n }\n }\n}\n","// Typography\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\nh1,\n.text-alpha {\n @include fs-8;\n\n font-weight: 300;\n}\n\nh2,\n.text-beta,\n#toctitle {\n @include fs-6;\n}\n\nh3,\n.text-gamma {\n @include fs-5;\n}\n\nh4,\n.text-delta {\n @include fs-2;\n\n font-weight: 400;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n}\n\nh4 code {\n text-transform: none;\n}\n\nh5,\n.text-epsilon {\n @include fs-3;\n}\n\nh6,\n.text-zeta {\n @include fs-2;\n}\n\n.text-small {\n @include fs-2;\n}\n\n.text-mono {\n font-family: $mono-font-family !important;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n","// Labels (not the form kind)\n\n// this :not() prevents a style clash with Mermaid.js's\n// diagram labels, which also use .label\n// for more, see https://github.com/just-the-docs/just-the-docs/issues/1272\n// and the accompanying PR\n.label:not(g),\n.label-blue:not(g) {\n display: inline-block;\n padding: 0.16em 0.56em;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $white;\n text-transform: uppercase;\n vertical-align: middle;\n background-color: $blue-100;\n @include fs-2;\n\n border-radius: 12px;\n}\n\n.label-green:not(g) {\n background-color: $green-200;\n}\n\n.label-purple:not(g) {\n background-color: $purple-100;\n}\n\n.label-red:not(g) {\n background-color: $red-200;\n}\n\n.label-yellow:not(g) {\n color: $grey-dk-200;\n background-color: $yellow-200;\n}\n","// Buttons and things that look like buttons\n// stylelint-disable color-named\n\n.btn {\n display: inline-block;\n box-sizing: border-box;\n padding: 0.3em 1em;\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n line-height: 1.5;\n color: $link-color;\n text-decoration: none;\n vertical-align: baseline;\n cursor: pointer;\n background-color: $base-button-color;\n border-width: 0;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n appearance: none;\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: darken($link-color, 2%);\n }\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n text-decoration: none;\n background-color: darken($base-button-color, 1%);\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($base-button-color, 3%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken(#dcdcdc, 5%);\n }\n\n &:disabled,\n &.disabled {\n &,\n &:hover {\n color: rgba(102, 102, 102, 0.5);\n cursor: default;\n background-color: rgba(229, 229, 229, 0.5);\n background-image: none;\n box-shadow: none;\n }\n }\n}\n\n.btn-outline {\n color: $link-color;\n background: transparent;\n box-shadow: inset 0 0 0 2px $grey-lt-300;\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n color: darken($link-color, 4%);\n text-decoration: none;\n background-color: transparent;\n box-shadow: inset 0 0 0 3px $grey-lt-300;\n }\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow:\n inset 0 0 0 2px $grey-dk-100,\n 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: inset 0 0 0 2px $grey-dk-100;\n }\n}\n\n.btn-primary {\n @include btn-color($white, $btn-primary-color);\n}\n\n.btn-purple {\n @include btn-color($white, $purple-100);\n}\n\n.btn-blue {\n @include btn-color($white, $blue-000);\n}\n\n.btn-green {\n @include btn-color($white, $green-100);\n}\n\n.btn-reset {\n background: none;\n border: none;\n margin: 0;\n text-align: inherit;\n font: inherit;\n border-radius: 0;\n appearance: none;\n}\n","// Colored button\n\n@mixin btn-color($fg, $bg) {\n color: $fg;\n background-color: darken($bg, 2%);\n background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%));\n box-shadow:\n 0 1px 3px rgba(0, 0, 0, 0.25),\n 0 4px 10px rgba(0, 0, 0, 0.12);\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: $fg;\n background-color: darken($bg, 4%);\n background-image: linear-gradient((lighten($bg, 2%), darken($bg, 4%)));\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($bg, 5%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken($bg, 10%);\n }\n}\n","// Search input and autocomplete\n\n.search {\n position: relative;\n z-index: 2;\n flex-grow: 1;\n height: $sp-10;\n padding: $sp-2;\n transition: padding linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: relative !important;\n width: auto !important;\n height: 100% !important;\n padding: 0;\n transition: none;\n }\n}\n\n.search-input-wrap {\n position: relative;\n z-index: 1;\n height: $sp-8;\n overflow: hidden;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n transition: height linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: absolute;\n width: 100%;\n max-width: $search-results-width;\n height: 100% !important;\n border-radius: 0;\n box-shadow: none;\n transition: width ease $transition-duration;\n }\n}\n\n.search-input {\n position: absolute;\n width: 100%;\n height: 100%;\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing-sm + $sp-5};\n font-size: 1rem;\n color: $body-text-color;\n background-color: $search-background-color;\n border-top: 0;\n border-right: 0;\n border-bottom: 0;\n border-left: 0;\n border-radius: 0;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing + $sp-5};\n font-size: 0.875rem;\n background-color: $body-background-color;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n &:focus {\n outline: 0;\n\n + .search-label .search-icon {\n color: $link-color;\n }\n }\n}\n\n.search-label {\n position: absolute;\n display: flex;\n height: 100%;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-left: $gutter-spacing;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n .search-icon {\n width: #{$sp-4 * 1.2};\n height: #{$sp-4 * 1.2};\n align-self: center;\n color: $grey-dk-000;\n }\n}\n\n.search-results {\n position: absolute;\n left: 0;\n display: none;\n width: 100%;\n max-height: calc(100% - #{$sp-10});\n overflow-y: auto;\n background-color: $search-background-color;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n\n @include mq(md) {\n top: 100%;\n width: $search-results-width;\n max-height: calc(100vh - 200%) !important;\n }\n}\n\n.search-results-list {\n padding-left: 0;\n margin-bottom: $sp-1;\n list-style: none;\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n}\n\n.search-results-list-item {\n padding: 0;\n margin: 0;\n}\n\n.search-result {\n display: block;\n padding: $sp-1 $sp-3;\n\n &:hover,\n &.active {\n background-color: $feedback-color;\n }\n}\n\n.search-result-title {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 40%;\n padding-right: $sp-2;\n vertical-align: top;\n }\n}\n\n.search-result-doc {\n display: flex;\n align-items: center;\n word-wrap: break-word;\n\n &.search-result-doc-parent {\n opacity: 0.5;\n @include fs-3;\n\n @include mq(md) {\n @include fs-2;\n }\n }\n\n .search-result-icon {\n width: $sp-4;\n height: $sp-4;\n margin-right: $sp-2;\n color: $link-color;\n flex-shrink: 0;\n }\n\n .search-result-doc-title {\n overflow: auto;\n }\n}\n\n.search-result-section {\n margin-left: #{$sp-4 + $sp-2};\n word-wrap: break-word;\n}\n\n.search-result-rel-url {\n display: block;\n margin-left: #{$sp-4 + $sp-2};\n overflow: hidden;\n color: $search-result-preview-color;\n text-overflow: ellipsis;\n white-space: nowrap;\n @include fs-1;\n}\n\n.search-result-previews {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n padding-left: $sp-4;\n margin-left: $sp-2;\n color: $search-result-preview-color;\n word-wrap: break-word;\n border-left: $border;\n border-left-color: $border-color;\n @include fs-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 60%;\n padding-left: $sp-2;\n margin-left: 0;\n vertical-align: top;\n }\n}\n\n.search-result-preview + .search-result-preview {\n margin-top: $sp-1;\n}\n\n.search-result-highlight {\n font-weight: bold;\n}\n\n.search-no-result {\n padding: $sp-2 $sp-3;\n @include fs-3;\n}\n\n.search-button {\n position: fixed;\n right: $sp-4;\n bottom: $sp-4;\n display: flex;\n width: $sp-9;\n height: $sp-9;\n background-color: $search-background-color;\n border: 1px solid rgba($link-color, 0.3);\n border-radius: #{$sp-9 * 0.5};\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n align-items: center;\n justify-content: center;\n}\n\n.search-overlay {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1;\n width: 0;\n height: 0;\n background-color: rgba(0, 0, 0, 0.3);\n opacity: 0;\n transition:\n opacity ease $transition-duration,\n width 0s $transition-duration,\n height 0s $transition-duration;\n}\n\n.search-active {\n .search {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .search-input-wrap {\n height: $sp-10;\n border-radius: 0;\n\n @include mq(md) {\n width: $search-results-width;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n }\n }\n\n .search-input {\n background-color: $search-background-color;\n\n @include mq(md) {\n padding-left: 2.3rem;\n }\n }\n\n .search-label {\n @include mq(md) {\n padding-left: 0.6rem;\n }\n }\n\n .search-results {\n display: block;\n }\n\n .search-overlay {\n width: 100%;\n height: 100%;\n opacity: 1;\n transition:\n opacity ease $transition-duration,\n width 0s,\n height 0s;\n }\n\n @include mq(md) {\n .main {\n position: fixed;\n right: 0;\n left: 0;\n }\n }\n\n .main-header {\n padding-top: $sp-10;\n\n @include mq(md) {\n padding-top: 0;\n }\n }\n}\n","// Tables\n// stylelint-disable max-nesting-depth, selector-no-type, selector-max-type\n\n.table-wrapper {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: $sp-5;\n overflow-x: auto;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n}\n\ntable {\n display: table;\n min-width: 100%;\n border-collapse: separate;\n}\n\nth,\ntd {\n @include fs-3;\n\n min-width: 7.5rem;\n padding: $sp-2 $sp-3;\n background-color: $table-background-color;\n border-bottom: $border rgba($border-color, 0.5);\n border-left: $border $border-color;\n\n &:first-of-type {\n border-left: 0;\n }\n}\n\ntbody {\n tr {\n &:last-of-type {\n th,\n td {\n border-bottom: 0;\n }\n\n td {\n padding-bottom: $sp-3;\n }\n }\n }\n}\n\nthead {\n th {\n border-bottom: $border $border-color;\n }\n}\n","// Code and syntax highlighting\n// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type, scss/comment-no-empty\n\n// {% raw %}\n\n// This instruction applies to all queues not within 'pre' or 'figure', avoiding 'code' generated by the highlight.\n:not(pre, figure) {\n & > code {\n padding: 0.2em 0.15em;\n font-weight: 400;\n background-color: $code-background-color;\n border: $border $border-color;\n border-radius: $border-radius;\n }\n}\n\n// Avoid appearance of dark border around visited code links in Safari\na:visited code {\n border-color: $border-color;\n}\n\n// Content structure for highlighted code blocks using fences or Liquid\n//\n// ```[LANG]...```, no kramdown line_numbers:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n//\n// ```[LANG]...```, kramdown line_numbers = true:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.rouge-gutter.gl > pre.lineno\n// | td.rouge-code > pre\n//\n// {% highlight LANG %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n//\n// {% highlight LANG linenos %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.gutter.gl > pre.lineno\n// | td.code > pre\n//\n// ----...---- (AsciiDoc)\n// div.listingblock > div.content > pre.rouge.highlight\n//\n// fix_linenos removes the outermost pre when it encloses table.rouge-table\n//\n// See docs/index-test.md for some tests.\n//\n// No kramdown line_numbers: fences and Liquid highlighting look the same.\n// Kramdown line_numbers = true: fences have a wider gutter than with Liquid?\n\n// ```[LANG]...```\n// or in AsciiDoc:\n//\n// ----\n// ...\n// ----\n\n// the code may appear with 3 different types:\n// container \\ case: default case, code with line number, code with html rendering\n// top level: div.highlighter-rouge, figure.highlight, figure.highlight\n// second level: div.highlight, div.table-wrapper, pre.highlight\n// third level: pre.highlight, td.code, absent\n// last level: code, pre, code (optionality)\n// highlighter level: span, span, span\n// the spacing are only in the second level for case 1, 3 and in the third level for case 2\n// in AsciiDoc, there is a parent container that contains optionally a title and the content.\n\n// select top level container\ndiv.highlighter-rouge,\ndiv.listingblock > div.content,\nfigure.highlight {\n margin-top: 0;\n margin-bottom: $sp-3;\n background-color: $code-background-color;\n border-radius: $border-radius;\n box-shadow: none;\n -webkit-overflow-scrolling: touch;\n position: relative;\n padding: 0;\n\n // copy button (or other button)\n // the button appear only when there is a hover on the code or focus on button\n > button {\n width: $sp-3;\n opacity: 0;\n position: absolute;\n top: 0;\n right: 0;\n border: $sp-3 solid $code-background-color;\n background-color: $code-background-color;\n color: $body-text-color;\n box-sizing: content-box;\n\n svg {\n fill: $body-text-color;\n }\n\n &:active {\n text-decoration: none;\n outline: none;\n opacity: 1;\n }\n\n &:focus {\n opacity: 1;\n }\n }\n\n // the button can be seen by doing a simple hover in the code, there is no need to go over the location of the button\n &:hover {\n > button {\n cursor: copy;\n opacity: 1;\n }\n }\n}\n\n// setting the spacing and scrollbar on the second level for the first case\n// remove all space on the second and third level\n// this is a mixin to accommodate for the slightly different structures generated via Markdown vs AsciiDoc\n@mixin scroll-and-spacing($code-div, $pre-select) {\n #{$code-div} {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 0;\n }\n\n #{$pre-select},\n code {\n padding: 0;\n margin: 0;\n border: 0;\n }\n}\n\n// for Markdown\ndiv.highlighter-rouge {\n @include scroll-and-spacing(\"div.highlight\", \"pre.highlight\");\n}\n\n// for AsciiDoc. we also need to fix the margins for its parent container.\ndiv.listingblock {\n @include scroll-and-spacing(\"div.content\", \"div.content > pre\");\n\n margin-top: 0;\n margin-bottom: $sp-3;\n}\n\n// {% highlight LANG %}...{% endhighlight %},\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the second level for the thirt case\n// the css rule are apply only to the last code enviroment\n// setting the scroolbar\nfigure.highlight {\n pre,\n :not(pre) > code {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 0;\n }\n}\n\n// ```[LANG]...```, kramdown line_numbers = true,\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the thirt level for the second case\n.highlight .table-wrapper {\n padding: $sp-3 0;\n margin: 0;\n border: 0;\n box-shadow: none;\n\n td,\n pre {\n @include fs-2;\n\n min-width: 0;\n padding: 0;\n background-color: $code-background-color;\n border: 0;\n }\n\n td.gl {\n width: 1em;\n padding-right: $sp-3;\n padding-left: $sp-3;\n }\n\n pre {\n margin: 0;\n line-height: 2;\n }\n}\n\n// Code examples: html render of a code\n.code-example,\n.listingblock > .title {\n padding: $sp-3;\n margin-bottom: $sp-3;\n overflow: auto;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n\n + .highlighter-rouge,\n + .sectionbody .listingblock,\n + .content,\n + figure.highlight {\n position: relative;\n margin-top: -$sp-4;\n border-right: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n border-left: 1px solid $border-color;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n\n// Mermaid diagram code blocks should be left unstyled.\ncode.language-mermaid {\n padding: 0;\n background-color: inherit;\n border: 0;\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight,\npre.highlight {\n background: $code-background-color; // Code Background\n // For Backwards Compatibility Before $code-linenumber-color was added\n @if variable-exists(code-linenumber-color) {\n color: $code-linenumber-color; // Code Line Numbers\n } @else {\n color: $body-text-color; // Code Line Numbers\n }\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight pre {\n background: $code-background-color; // Code Background\n}\n\n// {% endraw %}\n","// Utility classes for colors\n\n// Text colors\n\n.text-grey-dk-000 {\n color: $grey-dk-000 !important;\n}\n\n.text-grey-dk-100 {\n color: $grey-dk-100 !important;\n}\n\n.text-grey-dk-200 {\n color: $grey-dk-200 !important;\n}\n\n.text-grey-dk-250 {\n color: $grey-dk-250 !important;\n}\n\n.text-grey-dk-300 {\n color: $grey-dk-300 !important;\n}\n\n.text-grey-lt-000 {\n color: $grey-lt-000 !important;\n}\n\n.text-grey-lt-100 {\n color: $grey-lt-100 !important;\n}\n\n.text-grey-lt-200 {\n color: $grey-lt-200 !important;\n}\n\n.text-grey-lt-300 {\n color: $grey-lt-300 !important;\n}\n\n.text-blue-000 {\n color: $blue-000 !important;\n}\n\n.text-blue-100 {\n color: $blue-100 !important;\n}\n\n.text-blue-200 {\n color: $blue-200 !important;\n}\n\n.text-blue-300 {\n color: $blue-300 !important;\n}\n\n.text-green-000 {\n color: $green-000 !important;\n}\n\n.text-green-100 {\n color: $green-100 !important;\n}\n\n.text-green-200 {\n color: $green-200 !important;\n}\n\n.text-green-300 {\n color: $green-300 !important;\n}\n\n.text-purple-000 {\n color: $purple-000 !important;\n}\n\n.text-purple-100 {\n color: $purple-100 !important;\n}\n\n.text-purple-200 {\n color: $purple-200 !important;\n}\n\n.text-purple-300 {\n color: $purple-300 !important;\n}\n\n.text-yellow-000 {\n color: $yellow-000 !important;\n}\n\n.text-yellow-100 {\n color: $yellow-100 !important;\n}\n\n.text-yellow-200 {\n color: $yellow-200 !important;\n}\n\n.text-yellow-300 {\n color: $yellow-300 !important;\n}\n\n.text-red-000 {\n color: $red-000 !important;\n}\n\n.text-red-100 {\n color: $red-100 !important;\n}\n\n.text-red-200 {\n color: $red-200 !important;\n}\n\n.text-red-300 {\n color: $red-300 !important;\n}\n\n// Background colors\n\n.bg-grey-dk-000 {\n background-color: $grey-dk-000 !important;\n}\n\n.bg-grey-dk-100 {\n background-color: $grey-dk-100 !important;\n}\n\n.bg-grey-dk-200 {\n background-color: $grey-dk-200 !important;\n}\n\n.bg-grey-dk-250 {\n background-color: $grey-dk-250 !important;\n}\n\n.bg-grey-dk-300 {\n background-color: $grey-dk-300 !important;\n}\n\n.bg-grey-lt-000 {\n background-color: $grey-lt-000 !important;\n}\n\n.bg-grey-lt-100 {\n background-color: $grey-lt-100 !important;\n}\n\n.bg-grey-lt-200 {\n background-color: $grey-lt-200 !important;\n}\n\n.bg-grey-lt-300 {\n background-color: $grey-lt-300 !important;\n}\n\n.bg-blue-000 {\n background-color: $blue-000 !important;\n}\n\n.bg-blue-100 {\n background-color: $blue-100 !important;\n}\n\n.bg-blue-200 {\n background-color: $blue-200 !important;\n}\n\n.bg-blue-300 {\n background-color: $blue-300 !important;\n}\n\n.bg-green-000 {\n background-color: $green-000 !important;\n}\n\n.bg-green-100 {\n background-color: $green-100 !important;\n}\n\n.bg-green-200 {\n background-color: $green-200 !important;\n}\n\n.bg-green-300 {\n background-color: $green-300 !important;\n}\n\n.bg-purple-000 {\n background-color: $purple-000 !important;\n}\n\n.bg-purple-100 {\n background-color: $purple-100 !important;\n}\n\n.bg-purple-200 {\n background-color: $purple-200 !important;\n}\n\n.bg-purple-300 {\n background-color: $purple-300 !important;\n}\n\n.bg-yellow-000 {\n background-color: $yellow-000 !important;\n}\n\n.bg-yellow-100 {\n background-color: $yellow-100 !important;\n}\n\n.bg-yellow-200 {\n background-color: $yellow-200 !important;\n}\n\n.bg-yellow-300 {\n background-color: $yellow-300 !important;\n}\n\n.bg-red-000 {\n background-color: $red-000 !important;\n}\n\n.bg-red-100 {\n background-color: $red-100 !important;\n}\n\n.bg-red-200 {\n background-color: $red-200 !important;\n}\n\n.bg-red-300 {\n background-color: $red-300 !important;\n}\n","// Utility classes for layout\n\n// Display\n\n.d-block {\n display: block !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .d-sm-block, .d-md-none, .d-lg-inline\n .d-#{$media-query}-block {\n display: block !important;\n }\n .d-#{$media-query}-flex {\n display: flex !important;\n }\n .d-#{$media-query}-inline {\n display: inline !important;\n }\n .d-#{$media-query}-inline-block {\n display: inline-block !important;\n }\n .d-#{$media-query}-none {\n display: none !important;\n }\n }\n }\n}\n\n// Horizontal alignment\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.flex-justify-start {\n justify-content: flex-start !important;\n}\n\n.flex-justify-end {\n justify-content: flex-end !important;\n}\n\n.flex-justify-between {\n justify-content: space-between !important;\n}\n\n.flex-justify-around {\n justify-content: space-around !important;\n}\n\n// Vertical alignment\n\n.v-align-baseline {\n vertical-align: baseline !important;\n}\n\n.v-align-bottom {\n vertical-align: bottom !important;\n}\n\n.v-align-middle {\n vertical-align: middle !important;\n}\n\n.v-align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.v-align-text-top {\n vertical-align: text-top !important;\n}\n\n.v-align-top {\n vertical-align: top !important;\n}\n","// Utility classes for typography\n\n.fs-1 {\n @include fs-1;\n}\n\n.fs-2 {\n @include fs-2;\n}\n\n.fs-3 {\n @include fs-3;\n}\n\n.fs-4 {\n @include fs-4;\n}\n\n.fs-5 {\n @include fs-5;\n}\n\n.fs-6 {\n @include fs-6;\n}\n\n.fs-7 {\n @include fs-7;\n}\n\n.fs-8 {\n @include fs-8;\n}\n\n.fs-9 {\n @include fs-9;\n}\n\n.fs-10 {\n @include fs-10;\n}\n\n.fw-300 {\n font-weight: 300 !important;\n}\n\n.fw-400 {\n font-weight: 400 !important;\n}\n\n.fw-500 {\n font-weight: 500 !important;\n}\n\n.fw-700 {\n font-weight: 700 !important;\n}\n\n.lh-0 {\n line-height: 0 !important;\n}\n\n.lh-default {\n line-height: $body-line-height;\n}\n\n.lh-tight {\n line-height: $body-heading-line-height;\n}\n\n.ls-5 {\n letter-spacing: 0.05em !important;\n}\n\n.ls-10 {\n letter-spacing: 0.1em !important;\n}\n\n.ls-0 {\n letter-spacing: 0 !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n","// Utility classes for lists\n\n// stylelint-disable selector-max-type\n\n.list-style-none {\n padding: 0 !important;\n margin: 0 !important;\n list-style: none !important;\n\n li {\n &::before {\n display: none !important;\n }\n }\n}\n","// Utility classes for margins and padding\n\n// stylelint-disable block-opening-brace-space-after, block-opening-brace-space-before\n\n// Margin spacer utilities\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-0, .m-1, .m-2...\n .m-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n .mx-#{$scale}-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-sm-0, .m-md-1, .m-lg-2...\n .m-#{$media-query}-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$media-query}-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$media-query}-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$media-query}-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n }\n }\n}\n\n// Padding spacer utilities\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-0, .p-1, .p-2...\n .p-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @include mq($media-query) {\n @for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-sm-0, .p-md-1, .p-lg-2...\n .p-#{$media-query}-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$media-query}-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$media-query}-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n }\n }\n}\n","// stylelint-disable selector-max-specificity, selector-max-id, selector-max-type, selector-no-qualifying-type\n\n@media print {\n .site-footer,\n .site-button,\n #edit-this-page,\n #back-to-top,\n .site-nav,\n .main-header {\n display: none !important;\n }\n\n .side-bar {\n width: 100%;\n height: auto;\n border-right: 0 !important;\n }\n\n .site-header {\n border-bottom: 1px solid $border-color;\n }\n\n .site-title {\n font-size: 1rem !important;\n font-weight: 700 !important;\n }\n\n .text-small {\n font-size: 8pt !important;\n }\n\n pre.highlight {\n border: 1px solid $border-color;\n }\n\n .main {\n max-width: none;\n margin-left: 0;\n }\n}\n","// Skipnav\n// Skip to main content\n\na.skip-to-main {\n left: -999px;\n position: absolute;\n top: auto;\n width: 1px;\n height: 1px;\n overflow: hidden;\n z-index: -999;\n}\n\na.skip-to-main:focus,\na.skip-to-main:active {\n color: $link-color;\n background-color: $body-background-color;\n left: auto;\n top: auto;\n width: 30%;\n height: auto;\n overflow: auto;\n margin: 10px 35%;\n padding: 5px;\n border-radius: 15px;\n border: 4px solid $btn-primary-color;\n text-align: center;\n font-size: 1.2em;\n z-index: 999;\n}\n","\n$logo: \"/assets/images/logo.png\";\n\n@import \"./support/support\";\n@import \"./custom/setup\";\n@import \"./color_schemes/light\";\n\n@import \"./color_schemes/dark\";\n\n@import \"./modules\";\ndiv.opaque {\n background-color: $body-background-color;\n}p.warning, blockquote.warning {\n background: rgba($yellow-300, 0.2);\n border-left: $border-radius solid $yellow-000;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $yellow-000;\n content: \"Warning\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .warning-title {\n color: $yellow-000;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.warning-title, blockquote.warning-title {\n background: rgba($yellow-300, 0.2);\n border-left: $border-radius solid $yellow-000;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $yellow-000;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.warning {\n margin-left: 0;\n margin-right: 0;\n \n > p:first-child {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.warning-title {\n margin-left: 0;\n margin-right: 0;\n \n > p:nth-child(2) {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\np.danger, blockquote.danger {\n background: rgba($red-300, 0.2);\n border-left: $border-radius solid $red-000;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $red-000;\n content: \"Danger\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .danger-title {\n color: $red-000;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.danger-title, blockquote.danger-title {\n background: rgba($red-300, 0.2);\n border-left: $border-radius solid $red-000;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $red-000;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.danger {\n margin-left: 0;\n margin-right: 0;\n \n > p:first-child {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.danger-title {\n margin-left: 0;\n margin-right: 0;\n \n > p:nth-child(2) {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\np.note, blockquote.note {\n background: rgba($iueblue-300, 0.2);\n border-left: $border-radius solid $iueblue-000;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $iueblue-000;\n content: \"Note\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .note-title {\n color: $iueblue-000;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.note-title, blockquote.note-title {\n background: rgba($iueblue-300, 0.2);\n border-left: $border-radius solid $iueblue-000;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $iueblue-000;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.note {\n margin-left: 0;\n margin-right: 0;\n \n > p:first-child {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.note-title {\n margin-left: 0;\n margin-right: 0;\n \n > p:nth-child(2) {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n@import \"./custom/custom\";\n\n\n","$iueblue-000: #005077;\n$iueblue-100: #005077;\n$iueblue-200: #005077;\n$iueblue-300: #005077;"],"file":"just-the-docs-dark.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/vendor/OneLightJekyll/syntax.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/vendor/OneDarkJekyll/syntax.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/vendor/normalize.scss/normalize.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/base.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/color_schemes/dark.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/support/mixins/_typography.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/support/mixins/_layout.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/support/_variables.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/layout.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/content.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/navigation.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/typography.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/labels.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/buttons.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/support/mixins/_buttons.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/search.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/tables.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/code.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/utilities/_colors.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/utilities/_layout.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/utilities/_typography.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/utilities/_lists.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/utilities/_spacing.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/print.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/skiptomain.scss","just-the-docs-dark.scss","../../_sass/custom/setup.scss"],"names":[],"mappings":";AAEA;AAAA;EAEE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AC5MF;AAAA;EAEE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AA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X;EESJ;IAUI;;;;AAQJ;EFhBE,eCuDK;EDtDL,cCsDK;ECpCL,aDoCK;ECnCL,gBDmCK;;ADlEH;EE2BJ;IFZI,eCqDG;IDpDH,cCoDG;;;ADpEH;EE2BJ;IAOI,aDkCG;ICjCH,gBDiCG;;;;AC7BP;EACE;EACA;EACA,kBDtBY;;ADpBV;EEuCJ;IAMI;IACA;IACA,QD2CY;IC1CZ,kBD5BU;IC6BV;;;AAGF;EACE;;AFrDA;EEoDF;IAII;;;;AAKN;AAAA;AAAA;EAGE;;AFhEE;EE6DJ;AAAA;AAAA;IAMI,ODiBQ;;;;ACbZ;EACE;;AAEA;EACE;;AF3EA;EEuEJ;IAQI;IACA,aDVG;ICWH,gBDfG;ICgBH;IACA;;;;AAIJ;EACE;EACA,YDCc;ECAd;;AF1FE;EEuFJ;IAMI,QDHY;ICIZ,YDJY;ICKZ;;;;AAIJ;EFxFE,eCuDK;EDtDL,cCsDK;ECoCL;EACA;EACA;EACA;EACA,aDzCK;EC0CL,gBD1CK;EC2CL,ODvFY;EFMZ;;AC3BE;EEmGJ;IFpFI,eCqDG;IDpDH,cCoDG;;;ADpEH;EEmGJ;IHrEI;IACA,aEpCuB;;;ADKvB;EEmGJ;IAaI,aDhDG;ICiDH,gBDjDG;;;;ACsDL;EACE;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA,SDjEK;ECkEL;;;AFpIE;EEwIF;IACE;;;AAIJ;EACE;;;AAQF;EACE;;;AASF;EACE;EACA,gBD1FM;EC2FN;;AFnKE;EEgKJ;IAMI;IACA;;;;AAMJ;EFlKE,eCuDK;EDtDL,cCsDK;EC8GL;EACA;EACA;EACA,aDjHK;ECkHL,gBDlHK;ECmHL,ODrKY;EFrBZ;;ACKE;EE6KJ;IF9JI,eCqDG;IDpDH,cCoDG;;;ADpEH;EE6KJ;IH/KI;;;ACEA;EE6KJ;IAYI;IACA;;;;AAIJ;EACE,OD5HK;EC6HL,QD7HK;EC8HL,ODpKS;;;AEtCX;EACE,aFEoB;;AEApB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE;;AAGF;EACE;EACA;;AAGF;AAAA;EAEE;;AAIA;EACE,YF+CC;;AE3CL;EACE;EACA;;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA,OFfM;EEgBN;EACA;EJ9BN;;ACHE;EG2BE;IJrBF;;;ACNA;EG2BE;IAUI;;;AAIJ;EACE;;AAGE;EACE;EACA;;AAOV;EACE;;AAGE;EACE;EACA;EACA,OF7CM;EE8CN;;AAMJ;EACE;;AAIJ;EACE;EACA;;AAKF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;AAAA;EAEE;;AAGF;EACE;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;;AAmBE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AASF;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;;AAKN;EACE;EACA;EACA,OFnFG;EEoFH;EACA,eFzFG;EE0FH,cF1FG;EE2FH;;AH1JA;EGmJF;IAUI;IACA;;;AAGF;EACE;EACA;EACA;EACA,OFxIK;EEyIL;;AAYF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AAIJ;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAKE;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAWE,YF9JG;;;AG3EP;EACE;EACA;EACA;EACA;;AAEA;ELgBA;EKbE;EACA;;AJCA;EILF;ILmBE;;;ACdA;EILF;ILQA;;;ACHE;EILF;ILWE;;;AKDA;EACE;EACA,YH+DC;EG9DD,aHuDC;EGtDD,gBHsDC;EGrDD;EAEE,eH0DD;EGzDC,cHqDD;;ADlEH;EIKA;IAeI,YHgDD;IG/CC;IAEE,eH6CH;IG5CG,cH4CH;;;AGrCD;EACE,OHkCD;EGjCC,QHiCD;EGhCC;;AAGF;EACE;EACA;;AAGF;EAEE;;AASJ;EACE;EAEE;EAGF,OHWC;EGVD,QHUC;EGTD;EACA,OHjCK;;AD7BP;EIqDA;IAYI,OHGD;IGFC,QHED;IGDC;;;AAGF;EACE;;AAQA;EACE;;AAKN;EACE;EACA,cHtBC;EGuBD;;AAEA;EACE;;AAEA;EACE,OH9EI;;AGiFN;EACE,OHlFI;;AGwFR;EAEI;;AAMJ;EACE;;;AAMR;EACE;EACA;EACA;EACA;EACA;ELjIA;;ACKE;EIuHJ;ILzHI;;;ACEA;EIuHJ;IASI;IACA,YH/DG;IGgEH;;EAEA;IACE;;;;AAMJ;EACE;;AAEA;EACE;;AAGE;EACE,OHtHC;;AGyHH;EACE,OH1HC;;;AGmIX;EACE;EACA;ELvKA;;ACKE;EIgKJ;ILlKI;;;AKuKF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AJjLA;EIgKJ;IAqBI,eHnHG;;;;ADlEH;EI2LJ;IAEI;;;;AAIJ;EACE;EACA,eHlIK;EGmIL;;;AAGF;EACE;EL7MA;;ACKE;EIuMJ;ILzMI;;;AK6MF;EACE;;AAGF;EACE;EACA,cHjJG;EGkJH,aHlJG;EGmJH,OHnMU;EGoMV;;AAIA;EACE;;;ACpON;AAAA;ENwDE;EACA,aEnDyB;EIFzB;;ALOE;EKXJ;AAAA;IN4DI;;;;AMrDJ;AAAA;AAAA;EN+BE;;AC3BE;EKJJ;AAAA;AAAA;INkCI;IACA,aEpCuB;;;;AIO3B;AAAA;ENiBE;;ACnBE;EKEJ;AAAA;INoBI;;;;AMfJ;AAAA;ENZE;EMgBA;EACA;EACA;;ALbE;EKOJ;AAAA;INTI;;;;AMkBJ;EACE;;;AAGF;AAAA;ENjBE;;ACHE;EKoBJ;AAAA;INdI;;;;AMmBJ;AAAA;EN9BE;;ACKE;EKyBJ;AAAA;IN3BI;;;;AMgCJ;ENnCE;;ACKE;EK8BJ;INhCI;;;;AMoCJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;ACvDF;AAAA;EAEE;EACA;EACA,cLoEK;EKnEL,aLmEK;EKlEL,OLiBM;EKhBN;EACA;EACA,kBL6BS;EFnCT;EOSA;;ANJE;EMRJ;AAAA;IPMI;;;;AOSJ;EACE,kBL2BU;;;AKxBZ;EACE,kBLcW;;;AKXb;EACE,kBL2BQ;;;AKxBV;EACE,OLFY;EKGZ,kBLkBW;;;AMlDb;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,ON+BS;EM9BT;EACA;EACA;EACA,kBNiBY;EMhBZ;EACA,eNyEc;EMxEd,YACE;EAEF;;AAEA;EACE;EACA;EACA;;AAGF;EAEE;;AAGF;EAEE;;AAGF;EAIE;EACA;;AAGF;EAGE;EACA;EACA;;AAGF;EACE;;AAKA;EAEE;EACA;EACA;EACA;EACA;;;AAKN;EACE,ON/BS;EMgCT;EACA;;AAEA;EAIE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA,YACE;;AAIJ;EAEE;;;AAIJ;ECnGE,OP0BM;EOzBN;EACA;EACA,YACE;;AAGF;EAEE,OPiBI;EOhBJ;EACA;;AAGF;EAGE;EACA;EACA;;AAGF;EACE;;;ADgFJ;ECvGE,OP0BM;EOzBN;EACA;EACA,YACE;;AAGF;EAEE,OPiBI;EOhBJ;EACA;;AAGF;EAGE;EACA;EACA;;AAGF;EACE;;;ADoFJ;EC3GE,OP0BM;EOzBN;EACA;EACA,YACE;;AAGF;EAEE,OPiBI;EOhBJ;EACA;;AAGF;EAGE;EACA;EACA;;AAGF;EACE;;;ADwFJ;EC/GE,OP0BM;EOzBN;EACA;EACA,YACE;;AAGF;EAEE,OPiBI;EOhBJ;EACA;;AAGF;EAGE;EACA;EACA;;AAGF;EACE;;;AD4FJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AE3HF;EACE;EACA;EACA;EACA,QRgFM;EQ/EN,SRuEK;EQtEL;;ATME;ESZJ;IASI;IACA;IACA;IACA;IACA;;;;AAIJ;EACE;EACA;EACA,QR8DK;EQ7DL;EACA,eRmEc;EQlEd,YACE;EAEF;;ATdE;ESKJ;IAYI;IACA;IACA,WRwEmB;IQvEnB;IACA;IACA;IACA;;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA,ORTY;EQUZ,kBRfY;EQgBZ;EACA;EACA;EACA;EACA;;ATvCE;ES2BJ;IAeI;IACA;IACA,kBRxBU;IQyBV;;;AAGF;EACE;;AAEA;EACE,ORvBK;;;AQ4BX;EACE;EACA;EACA;EACA,cRKK;;ADlEH;ESyDJ;IAOI,cRIG;IQHH;;;AAGF;EACE;EACA;EACA;EACA,ORxDU;;;AQ4Dd;EACE;EACA;EACA;EACA;EACA;EACA;EACA,kBRhEY;EQiEZ,4BRPc;EQQd,2BRRc;EQSd,YACE;;ATvFA;ES4EJ;IAeI;IACA,ORDmB;IQEnB;;;;AAIJ;EACE;EACA,eRpCK;EQqCL;EVzFA;;ACXE;ESiGJ;IVnFI;;;ACdA;ESiGJ;IV9FE;;;ACHE;ESiGJ;IV3FI;;;;AUsGJ;EACE;EACA;;;AAGF;EACE;EACA;;AAEA;EAEE,kBX1Ha;;;AW8HjB;EACE;EACA,aR7DK;EQ8DL,gBR9DK;;ADhEH;ES2HJ;IAMI;IACA;IACA,eRnEG;IQoEH;;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;EV3IF;;ACHE;ES6IF;IVvIE;;;ACNA;ES6IF;IVlJA;;;ACKE;ES6IF;IV/IE;;;AUwJF;EACE,ORrFG;EQsFH,QRtFG;EQuFH,cRzFG;EQ0FH,OR7HO;EQ8HP;;AAGF;EACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA,OR5JY;EQ6JZ;EACA;EV3LA;;ACaE;ESwKJ;IVlLI;;;;AU4LJ;EACE;EACA,aRpHK;EQqHL,gBRrHK;EQsHL,cRpHK;EQqHL,aRvHK;EQwHL,ORxKY;EQyKZ;EACA,aR9GO;EQ+GP,mBRzKY;EFvBZ;;ACKE;ESkLJ;IVpLI;;;ACEA;ESkLJ;IAaI;IACA;IACA,cRjIG;IQkIH;IACA;;;;AAIJ;EACE,YRzIK;;;AQ4IP;EACE;;;AAGF;EACE;EV7MA;;ACHE;ES+MJ;IVzMI;;;;AU8MJ;EACE;EACA,ORpJK;EQqJL,QRrJK;EQsJL;EACA,ORlJK;EQmJL,QRnJK;EQoJL,kBRxMY;EQyMZ;EACA;EACA,YACE;EAEF;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE,QRvLI;EQwLJ;;AThQA;ES8PF;IAKI,ORxKiB;IQyKjB,YACE;;;AAKN;EACE,kBRxPU;;ADnBV;ES0QF;IAII;;;AT9QF;ESkRF;IAEI;;;AAIJ;EACE;;AAGF;EACE;EACA;EACA;EACA,YACE;;ATjSF;ESuSA;IACE;IACA;IACA;;;AAIJ;EACE,aRvOI;;ADxEJ;ES8SF;IAII;;;;AC7TN;EACE;EACA;EACA;EACA,eT0EK;ESzEL;EACA,eTkFc;ESjFd,YACE;;;AAIJ;EACE;EACA;EACA;;;AAGF;AAAA;EXJE;EWQA;EACA;EACA,kBTMY;ESLZ;EACA;;AVfE;EUOJ;AAAA;IXDI;;;AWWF;AAAA;EACE;;;AAOE;AAAA;EAEE;;AAGF;EACE,gBTkCD;;;AS3BL;EACE;;;AC9CF;EACE;EACA;EACA,kBbDoB;EaEpB;EACA,eV+EY;;;AU1EhB;EACE,cVcY;;;AUqCd;AAAA;AAAA;EAGE;EACA,eVMK;EULL,kBbjEsB;EakEtB,eVgBc;EUfd;EACA;EACA;EACA;;AAIA;AAAA;AAAA;EACE,OVLG;EUMH;EACA;EACA;EACA;EACA;EACA,kBbjFoB;EakFpB,OVrDU;EUsDV;;AAEA;AAAA;AAAA;EACE,MVzDQ;;AU4DV;AAAA;AAAA;EACE;EACA;EACA;;AAGF;AAAA;AAAA;EACE;;AAMF;AAAA;AAAA;EACE;EACA;;;AASJ;EACE;EACA,SV7CG;EU8CH;EACA;;AAGF;AAAA;EAEE;EACA;EACA;;;AAUJ;EAGE;EACA,eVpEK;;AU2CL;EACE;EACA,SV7CG;EU8CH;EACA;;AAGF;AAAA;EAEE;EACA;EACA;;;AAwBF;AAAA;EAEE;EACA,SVjFG;EUkFH;EACA;;;AAQJ;EACE;EACA;EACA;EACA;;AAEA;AAAA;EZvKA;EY2KE;EACA;EACA,kBb7KoB;Ea8KpB;;AXzKA;EWkKF;AAAA;IZpKE;;;AY8KF;EACE;EACA,eV7GG;EU8GH,cV9GG;;AUiHL;EACE;EACA;;;AAKJ;AAAA;EAEE,SV1HK;EU2HL,eV3HK;EU4HL;EACA;EACA,eVlHc;;AUoHd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAIE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKJ;EACE;EACA;EACA;;;AAIF;AAAA;EAEE,Yb9NsB;EaiOpB,ObhOoB;;;AauOxB;EACE,YbzOsB;;;AcLxB;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;ACvOF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AbPE;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAQR;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;ACjGF;EfDE;;ACaE;EcZJ;IfEI;;;;AeEJ;EfGE;;ACKE;EcRJ;IfMI;;;;AeFJ;EfOE;;ACHE;EcJJ;IfUI;;;;AeNJ;EfWE;;ACXE;EcAJ;IfcI;;;;AeVJ;EfeE;;ACnBE;EcIJ;IfkBI;;;;AedJ;EfmBE;;AC3BE;EcQJ;IfsBI;IACA,aEpCuB;;;;AaiB3B;EfwBE;EACA,aE1CyB;;ADKvB;EcYJ;If4BI;;;;AexBJ;Ef6BE;EACA,aEnDyB;;ADKvB;EcgBJ;IfiCI;;;;Ae7BJ;EfkCE;EACA,aE5DyB;;ADKvB;EcoBJ;IfsCI;;;;AelCJ;EfuCE;EACA,aErEyB;;ADKvB;EcwBJ;If2CI;;;;AevCJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE,abxDiB;;;Aa2DnB;EACE,ab1DyB;;;Aa6D3B;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AC/EF;EACE;EACA;EACA;;AAGE;EACE;;;ACLN;EACE;EACA;;;AAQA;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AhBlCA;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AAaN;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AhB7GA;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AC3JR;EACE;AAAA;AAAA;AAAA;AAAA;AAAA;IAME;;EAGF;IACE;IACA;IACA;;EAGF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;IACA;;;AClCJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE,OjB4BS;EiB3BT,kBjBkBY;EiBjBZ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AClBF;EACE,kBlBuBY;;;AkBtBb;EACG;EACA;EACA,elB4EY;EkB3EZ;EACA;;AAEA;EACI,OlB+BK;EkB9BL;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlBqBO;EkBpBP;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBiDY;EkBhDZ;EACA;;AACA;EACE;EACA;EACA,OlBGO;EkBFP;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACI;EACA;EACA,elBKY;EkBJZ;EACA;;AAEA;EACI,OlBpCE;EkBqCF;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlB9CI;EkB+CJ;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBtBY;EkBuBZ;EACA;;AACA;EACE;EACA;EACA,OlBhEI;EkBiEJ;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACI;EACA;EACA,elBlEY;EkBmEZ;EACA;;AAEA;EACI,OClKM;EDmKN;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OC5KQ;ED6KR;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elB7FY;EkB8FZ;EACA;;AACA;EACE;EACA;EACA,OC9LQ;ED+LR;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE","sourcesContent":["// Generated with OneLightJekyll applied to Atom's One Light theme\n\n.highlight,\npre.highlight {\n background: #f9f9f9;\n color: #383942;\n}\n.highlight pre {\n background: #f9f9f9;\n}\n.highlight .hll {\n background: #f9f9f9;\n}\n.highlight .c {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .err {\n color: #fff;\n background-color: #e05151;\n}\n.highlight .k {\n color: #a625a4;\n}\n.highlight .l {\n color: #50a04f;\n}\n.highlight .n {\n color: #383942;\n}\n.highlight .o {\n color: #383942;\n}\n.highlight .p {\n color: #383942;\n}\n.highlight .cm {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .cp {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .c1 {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .cs {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .ge {\n font-style: italic;\n}\n.highlight .gs {\n font-weight: 700;\n}\n.highlight .kc {\n color: #a625a4;\n}\n.highlight .kd {\n color: #a625a4;\n}\n.highlight .kn {\n color: #a625a4;\n}\n.highlight .kp {\n color: #a625a4;\n}\n.highlight .kr {\n color: #a625a4;\n}\n.highlight .kt {\n color: #a625a4;\n}\n.highlight .ld {\n color: #50a04f;\n}\n.highlight .m {\n color: #b66a00;\n}\n.highlight .s {\n color: #50a04f;\n}\n.highlight .na {\n color: #b66a00;\n}\n.highlight .nb {\n color: #ca7601;\n}\n.highlight .nc {\n color: #ca7601;\n}\n.highlight .no {\n color: #ca7601;\n}\n.highlight .nd {\n color: #ca7601;\n}\n.highlight .ni {\n color: #ca7601;\n}\n.highlight .ne {\n color: #ca7601;\n}\n.highlight .nf {\n color: #383942;\n}\n.highlight .nl {\n color: #ca7601;\n}\n.highlight .nn {\n color: #383942;\n}\n.highlight .nx {\n color: #383942;\n}\n.highlight .py {\n color: #ca7601;\n}\n.highlight .nt {\n color: #e35549;\n}\n.highlight .nv {\n color: #ca7601;\n}\n.highlight .ow {\n font-weight: 700;\n}\n.highlight .w {\n color: #f8f8f2;\n}\n.highlight .mf {\n color: #b66a00;\n}\n.highlight .mh {\n color: #b66a00;\n}\n.highlight .mi {\n color: #b66a00;\n}\n.highlight .mo {\n color: #b66a00;\n}\n.highlight .sb {\n color: #50a04f;\n}\n.highlight .sc {\n color: #50a04f;\n}\n.highlight .sd {\n color: #50a04f;\n}\n.highlight .s2 {\n color: #50a04f;\n}\n.highlight .se {\n color: #50a04f;\n}\n.highlight .sh {\n color: #50a04f;\n}\n.highlight .si {\n color: #50a04f;\n}\n.highlight .sx {\n color: #50a04f;\n}\n.highlight .sr {\n color: #0083bb;\n}\n.highlight .s1 {\n color: #50a04f;\n}\n.highlight .ss {\n color: #0083bb;\n}\n.highlight .bp {\n color: #ca7601;\n}\n.highlight .vc {\n color: #ca7601;\n}\n.highlight .vg {\n color: #ca7601;\n}\n.highlight .vi {\n color: #e35549;\n}\n.highlight .il {\n color: #b66a00;\n}\n.highlight .gu {\n color: #75715e;\n}\n.highlight .gd {\n color: #e05151;\n}\n.highlight .gi {\n color: #43d089;\n}\n.highlight .language-json .w + .s2 {\n color: #e35549;\n}\n.highlight .language-json .kc {\n color: #0083bb;\n}\n","// Generated with OneDarkJekyll applied to Atom's One Dark Vivid theme\n\n.highlight,\npre.highlight {\n background: #31343f;\n color: #dee2f7;\n}\n.highlight pre {\n background: #31343f;\n}\n.highlight .hll {\n background: #31343f;\n}\n.highlight .c {\n color: #63677e;\n font-style: italic;\n}\n.highlight .err {\n color: #960050;\n background-color: #1e0010;\n}\n.highlight .k {\n color: #e19ef5;\n}\n.highlight .l {\n color: #a3eea0;\n}\n.highlight .n {\n color: #dee2f7;\n}\n.highlight .o {\n color: #dee2f7;\n}\n.highlight .p {\n color: #dee2f7;\n}\n.highlight .cm {\n color: #63677e;\n font-style: italic;\n}\n.highlight .cp {\n color: #63677e;\n font-style: italic;\n}\n.highlight .c1 {\n color: #63677e;\n font-style: italic;\n}\n.highlight .cs {\n color: #63677e;\n font-style: italic;\n}\n.highlight .ge {\n font-style: italic;\n}\n.highlight .gs {\n font-weight: 700;\n}\n.highlight .kc {\n color: #e19ef5;\n}\n.highlight .kd {\n color: #e19ef5;\n}\n.highlight .kn {\n color: #e19ef5;\n}\n.highlight .kp {\n color: #e19ef5;\n}\n.highlight .kr {\n color: #e19ef5;\n}\n.highlight .kt {\n color: #e19ef5;\n}\n.highlight .ld {\n color: #a3eea0;\n}\n.highlight .m {\n color: #eddc96;\n}\n.highlight .s {\n color: #a3eea0;\n}\n.highlight .na {\n color: #eddc96;\n}\n.highlight .nb {\n color: #fdce68;\n}\n.highlight .nc {\n color: #fdce68;\n}\n.highlight .no {\n color: #fdce68;\n}\n.highlight .nd {\n color: #fdce68;\n}\n.highlight .ni {\n color: #fdce68;\n}\n.highlight .ne {\n color: #fdce68;\n}\n.highlight .nf {\n color: #dee2f7;\n}\n.highlight .nl {\n color: #fdce68;\n}\n.highlight .nn {\n color: #dee2f7;\n}\n.highlight .nx {\n color: #dee2f7;\n}\n.highlight .py {\n color: #fdce68;\n}\n.highlight .nt {\n color: #f9867b;\n}\n.highlight .nv {\n color: #fdce68;\n}\n.highlight .ow {\n font-weight: 700;\n}\n.highlight .w {\n color: #f8f8f2;\n}\n.highlight .mf {\n color: #eddc96;\n}\n.highlight .mh {\n color: #eddc96;\n}\n.highlight .mi {\n color: #eddc96;\n}\n.highlight .mo {\n color: #eddc96;\n}\n.highlight .sb {\n color: #a3eea0;\n}\n.highlight .sc {\n color: #a3eea0;\n}\n.highlight .sd {\n color: #a3eea0;\n}\n.highlight .s2 {\n color: #a3eea0;\n}\n.highlight .se {\n color: #a3eea0;\n}\n.highlight .sh {\n color: #a3eea0;\n}\n.highlight .si {\n color: #a3eea0;\n}\n.highlight .sx {\n color: #a3eea0;\n}\n.highlight .sr {\n color: #7be2f9;\n}\n.highlight .s1 {\n color: #a3eea0;\n}\n.highlight .ss {\n color: #7be2f9;\n}\n.highlight .bp {\n color: #fdce68;\n}\n.highlight .vc {\n color: #fdce68;\n}\n.highlight .vg {\n color: #fdce68;\n}\n.highlight .vi {\n color: #f9867b;\n}\n.highlight .il {\n color: #eddc96;\n}\n.highlight .gu {\n color: #75715e;\n}\n.highlight .gd {\n color: #f92672;\n}\n.highlight .gi {\n color: #a6e22e;\n}\n","/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput {\n /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect {\n /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// Base element style overrides\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\n:root {\n color-scheme: $color-scheme;\n}\n\n* {\n box-sizing: border-box;\n}\n\nhtml {\n @include fs-4;\n\n scroll-behavior: smooth;\n}\n\nbody {\n font-family: $body-font-family;\n font-size: inherit;\n line-height: $body-line-height;\n color: $body-text-color;\n background-color: $body-background-color;\n overflow-wrap: break-word;\n}\n\nol,\nul,\ndl,\npre,\naddress,\nblockquote,\ntable,\ndiv,\nhr,\nform,\nfieldset,\nnoscript .table-wrapper {\n margin-top: 0;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n#toctitle {\n margin-top: 0;\n margin-bottom: 1em;\n font-weight: 500;\n line-height: $body-heading-line-height;\n color: $body-heading-color;\n}\n\np {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n\na {\n color: $link-color;\n text-decoration: none;\n}\n\na:not([class]) {\n text-decoration: underline;\n text-decoration-color: $border-color;\n text-underline-offset: 2px;\n\n &:hover {\n text-decoration-color: rgba($link-color, 0.45);\n }\n}\n\ncode {\n font-family: $mono-font-family;\n font-size: 0.75em;\n line-height: $body-line-height;\n}\n\nfigure,\npre {\n margin: 0;\n}\n\nli {\n margin: 0.25em 0;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\nhr {\n height: 1px;\n padding: 0;\n margin: $sp-6 0;\n background-color: $border-color;\n border: 0;\n}\n\n// adds a GitHub-style sidebar to blockquotes\nblockquote {\n margin: 10px 0;\n\n // resets user-agent stylesheets for blockquotes\n margin-block-start: 0;\n margin-inline-start: 0;\n padding-left: 1rem;\n border-left: 3px solid $border-color;\n}\n","$color-scheme: dark;\n$body-background-color: $grey-dk-300;\n$body-heading-color: $grey-lt-000;\n$body-text-color: $grey-lt-300;\n$link-color: $blue-000;\n$nav-child-link-color: $grey-dk-000;\n$sidebar-color: $grey-dk-300;\n$base-button-color: $grey-dk-250;\n$btn-primary-color: $blue-200;\n$code-background-color: #31343f; // OneDarkJekyll default for syntax-one-dark-vivid\n$code-linenumber-color: #dee2f7; // OneDarkJekyll .nf for syntax-one-dark-vivid\n$feedback-color: darken($sidebar-color, 3%);\n$table-background-color: $grey-dk-250;\n$search-background-color: $grey-dk-250;\n$search-result-preview-color: $grey-dk-000;\n$border-color: $grey-dk-200;\n\n@import \"./vendor/OneDarkJekyll/syntax\"; // this is the one-dark-vivid atom syntax theme\n","@mixin fs-1 {\n font-size: $font-size-1 !important;\n\n @include mq(sm) {\n font-size: $font-size-1-sm !important;\n }\n}\n\n@mixin fs-2 {\n font-size: $font-size-2 !important;\n\n @include mq(sm) {\n font-size: $font-size-3 !important;\n }\n}\n\n@mixin fs-3 {\n font-size: $font-size-3 !important;\n\n @include mq(sm) {\n font-size: $font-size-4 !important;\n }\n}\n\n@mixin fs-4 {\n font-size: $font-size-4 !important;\n\n @include mq(sm) {\n font-size: $font-size-5 !important;\n }\n}\n\n@mixin fs-5 {\n font-size: $font-size-5 !important;\n\n @include mq(sm) {\n font-size: $font-size-6 !important;\n }\n}\n\n@mixin fs-6 {\n font-size: $font-size-6 !important;\n\n @include mq(sm) {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n}\n\n@mixin fs-7 {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-8 !important;\n }\n}\n\n@mixin fs-8 {\n font-size: $font-size-8 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-9 !important;\n }\n}\n\n@mixin fs-9 {\n font-size: $font-size-9 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-10 !important;\n }\n}\n\n@mixin fs-10 {\n font-size: $font-size-10 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-10-sm !important;\n }\n}\n","// Media query\n\n// Media query mixin\n// Usage:\n// @include mq(md) {\n// ..medium and up styles\n// }\n@mixin mq($name) {\n // Retrieves the value from the key\n $value: map-get($media-queries, $name);\n\n // If the key exists in the map\n @if $value {\n // Prints a media query based on the value\n @media (min-width: $value) {\n @content;\n }\n } @else {\n @warn \"No value could be retrieved from `#{$media-query}`. Please make sure it is defined in `$media-queries` map.\";\n }\n}\n\n// Responsive container\n\n@mixin container {\n padding-right: $gutter-spacing-sm;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-right: $gutter-spacing;\n padding-left: $gutter-spacing;\n }\n}\n","// Typography\n\n// prettier-ignore\n$body-font-family: system-ui, -apple-system, blinkmacsystemfont, \"Segoe UI\",\n roboto, \"Helvetica Neue\", arial, sans-serif, \"Segoe UI Emoji\" !default;\n$mono-font-family: \"SFMono-Regular\", menlo, consolas, monospace !default;\n$root-font-size: 16px !default; // DEPRECATED: previously base font-size for rems\n$body-line-height: 1.4 !default;\n$content-line-height: 1.6 !default;\n$body-heading-line-height: 1.25 !default;\n\n// Font size\n// `-sm` suffix is the size at the small (and above) media query\n\n$font-size-1: 0.5625rem !default;\n$font-size-1-sm: 0.625rem !default;\n$font-size-2: 0.6875rem !default; // h4 - uppercased!, h6 not uppercased, text-small\n$font-size-3: 0.75rem !default; // h5\n$font-size-4: 0.875rem !default;\n$font-size-5: 1rem !default; // h3\n$font-size-6: 1.125rem !default; // h2\n$font-size-7: 1.5rem !default;\n$font-size-8: 2rem !default; // h1\n$font-size-9: 2.25rem !default;\n$font-size-10: 2.625rem !default;\n$font-size-10-sm: 3rem !default;\n\n// Colors\n\n$white: #fff !default;\n$grey-dk-000: #959396 !default;\n$grey-dk-100: #5c5962 !default;\n$grey-dk-200: #44434d !default;\n$grey-dk-250: #302d36 !default;\n$grey-dk-300: #27262b !default;\n$grey-lt-000: #f5f6fa !default;\n$grey-lt-100: #eeebee !default;\n$grey-lt-200: #ecebed !default;\n$grey-lt-300: #e6e1e8 !default;\n$purple-000: #7253ed !default;\n$purple-100: #5e41d0 !default;\n$purple-200: #4e26af !default;\n$purple-300: #381885 !default;\n$blue-000: #2c84fa !default;\n$blue-100: #2869e6 !default;\n$blue-200: #264caf !default;\n$blue-300: #183385 !default;\n$green-000: #41d693 !default;\n$green-100: #11b584 !default;\n$green-200: #009c7b !default;\n$green-300: #026e57 !default;\n$yellow-000: #ffeb82 !default;\n$yellow-100: #fadf50 !default;\n$yellow-200: #f7d12e !default;\n$yellow-300: #e7af06 !default;\n$red-000: #f77e7e !default;\n$red-100: #f96e65 !default;\n$red-200: #e94c4c !default;\n$red-300: #dd2e2e !default;\n\n// Spacing\n\n$spacing-unit: 1rem; // 1rem == 16px\n\n$spacers: (\n sp-0: 0,\n sp-1: $spacing-unit * 0.25,\n sp-2: $spacing-unit * 0.5,\n sp-3: $spacing-unit * 0.75,\n sp-4: $spacing-unit,\n sp-5: $spacing-unit * 1.5,\n sp-6: $spacing-unit * 2,\n sp-7: $spacing-unit * 2.5,\n sp-8: $spacing-unit * 3,\n sp-9: $spacing-unit * 3.5,\n sp-10: $spacing-unit * 4,\n) !default;\n$sp-1: map-get($spacers, sp-1) !default; // 0.25 rem == 4px\n$sp-2: map-get($spacers, sp-2) !default; // 0.5 rem == 8px\n$sp-3: map-get($spacers, sp-3) !default; // 0.75 rem == 12px\n$sp-4: map-get($spacers, sp-4) !default; // 1 rem == 16px\n$sp-5: map-get($spacers, sp-5) !default; // 1.5 rem == 24px\n$sp-6: map-get($spacers, sp-6) !default; // 2 rem == 32px\n$sp-7: map-get($spacers, sp-7) !default; // 2.5 rem == 40px\n$sp-8: map-get($spacers, sp-8) !default; // 3 rem == 48px\n$sp-9: map-get($spacers, sp-9) !default; // 3.5 rem == 56px\n$sp-10: map-get($spacers, sp-10) !default; // 4 rem == 64px\n\n// Borders\n\n$border: 1px solid !default;\n$border-radius: 4px !default;\n$border-color: $grey-lt-100 !default;\n\n// Grid system\n\n$gutter-spacing: $sp-6 !default;\n$gutter-spacing-sm: $sp-4 !default;\n$nav-width: 16.5rem !default;\n$nav-width-md: 15.5rem !default;\n$nav-list-item-height: $sp-6 !default;\n$nav-list-item-height-sm: $sp-8 !default;\n$nav-list-expander-right: true;\n$content-width: 50rem !default;\n$header-height: 3.75rem !default;\n$search-results-width: $content-width - $nav-width !default;\n$transition-duration: 400ms;\n\n// Media queries in pixels\n\n$media-queries: (\n xs: 20rem,\n sm: 31.25rem,\n md: $content-width,\n lg: $content-width + $nav-width,\n xl: 87.5rem,\n) !default;\n","// The basic two column layout\n\n.side-bar {\n z-index: 0;\n display: flex;\n flex-wrap: wrap;\n background-color: $sidebar-color;\n\n @include mq(md) {\n flex-flow: column nowrap;\n position: fixed;\n width: $nav-width-md;\n height: 100%;\n border-right: $border $border-color;\n align-items: flex-end;\n }\n\n @include mq(lg) {\n width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});\n min-width: $nav-width;\n }\n}\n\n.main {\n @include mq(md) {\n position: relative;\n max-width: $content-width;\n margin-left: $nav-width-md;\n }\n\n @include mq(lg) {\n // stylelint-disable function-name-case\n // disable for Max(), we want to use the CSS max() function\n margin-left: Max(\n #{$nav-width},\n calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width})\n );\n // stylelint-enable function-name-case\n }\n}\n\n.main-content-wrap {\n @include container;\n\n padding-top: $gutter-spacing-sm;\n padding-bottom: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-top: $gutter-spacing;\n padding-bottom: $gutter-spacing;\n }\n}\n\n.main-header {\n z-index: 0;\n display: none;\n background-color: $sidebar-color;\n\n @include mq(md) {\n display: flex;\n justify-content: space-between;\n height: $header-height;\n background-color: $body-background-color;\n border-bottom: $border $border-color;\n }\n\n &.nav-open {\n display: block;\n\n @include mq(md) {\n display: flex;\n }\n }\n}\n\n.site-nav,\n.site-header,\n.site-footer {\n width: 100%;\n\n @include mq(lg) {\n width: $nav-width;\n }\n}\n\n.site-nav {\n display: none;\n\n &.nav-open {\n display: block;\n }\n\n @include mq(md) {\n display: block;\n padding-top: $sp-8;\n padding-bottom: $gutter-spacing-sm;\n overflow-y: auto;\n flex: 1 1 auto;\n }\n}\n\n.site-header {\n display: flex;\n min-height: $header-height;\n align-items: center;\n\n @include mq(md) {\n height: $header-height;\n max-height: $header-height;\n border-bottom: $border $border-color;\n }\n}\n\n.site-title {\n @include container;\n\n flex-grow: 1;\n display: flex;\n height: 100%;\n align-items: center;\n padding-top: $sp-3;\n padding-bottom: $sp-3;\n color: $body-heading-color;\n @include fs-6;\n\n @include mq(md) {\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n }\n}\n\n@if variable-exists(logo) {\n .site-logo {\n width: 100%;\n height: 100%;\n background-image: url($logo);\n background-repeat: no-repeat;\n background-position: left center;\n background-size: contain;\n }\n}\n\n.site-button {\n display: flex;\n height: 100%;\n padding: $gutter-spacing-sm;\n align-items: center;\n}\n\n@include mq(md) {\n .site-header .site-button {\n display: none;\n }\n}\n\n.site-title:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n}\n\n.site-button:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n}\n\n// stylelint-disable selector-max-type\n\nbody {\n position: relative;\n padding-bottom: $sp-10;\n overflow-y: scroll;\n\n @include mq(md) {\n position: static;\n padding-bottom: 0;\n }\n}\n\n// stylelint-enable selector-max-type\n\n.site-footer {\n @include container;\n\n position: absolute;\n bottom: 0;\n left: 0;\n padding-top: $sp-4;\n padding-bottom: $sp-4;\n color: $grey-dk-000;\n @include fs-2;\n\n @include mq(md) {\n position: static;\n justify-self: end;\n }\n}\n\n.icon {\n width: $sp-5;\n height: $sp-5;\n color: $link-color;\n}\n","@charset \"UTF-8\";\n\n// Styles for rendered markdown in the .main-content container\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity, selector-max-id\n\n.main-content {\n line-height: $content-line-height;\n\n ol,\n ul,\n dl,\n pre,\n address,\n blockquote,\n .table-wrapper {\n margin-top: 0.5em;\n }\n\n a {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n ul,\n ol {\n padding-left: 1.5em;\n }\n\n li {\n .highlight {\n margin-top: $sp-1;\n }\n }\n\n ol {\n list-style-type: none;\n counter-reset: step-counter;\n\n > li {\n position: relative;\n\n &::before {\n position: absolute;\n top: 0.2em;\n left: -1.6em;\n color: $grey-dk-000;\n content: counter(step-counter);\n counter-increment: step-counter;\n @include fs-3;\n\n @include mq(sm) {\n top: 0.11em;\n }\n }\n\n ol {\n counter-reset: sub-counter;\n\n > li {\n &::before {\n content: counter(sub-counter, lower-alpha);\n counter-increment: sub-counter;\n }\n }\n }\n }\n }\n\n ul {\n list-style: none;\n\n > li {\n &::before {\n position: absolute;\n margin-left: -1.4em;\n color: $grey-dk-000;\n content: \"•\";\n }\n }\n }\n\n .task-list-item {\n &::before {\n content: \"\";\n }\n }\n\n .task-list-item-checkbox {\n margin-right: 0.6em;\n margin-left: -1.4em;\n\n // The same margin-left is used above for ul > li::before\n }\n\n hr + * {\n margin-top: 0;\n }\n\n h1:first-of-type {\n margin-top: 0.5em;\n }\n\n dl {\n display: grid;\n grid-template: auto / 10em 1fr;\n }\n\n dt,\n dd {\n margin: 0.25em 0;\n }\n\n dt {\n grid-column: 1;\n font-weight: 500;\n text-align: right;\n\n &::after {\n content: \":\";\n }\n }\n\n dd {\n grid-column: 2;\n margin-bottom: 0;\n margin-left: 1em;\n\n blockquote,\n div,\n dl,\n dt,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n li,\n ol,\n p,\n pre,\n table,\n ul,\n .table-wrapper {\n &:first-child {\n margin-top: 0;\n }\n }\n }\n\n dd,\n ol,\n ul {\n dl:first-child {\n dt:first-child,\n dd:nth-child(2) {\n margin-top: 0;\n }\n }\n }\n\n .anchor-heading {\n position: absolute;\n right: -$sp-4;\n width: $sp-5;\n height: 100%;\n padding-right: $sp-1;\n padding-left: $sp-1;\n overflow: visible;\n\n @include mq(md) {\n right: auto;\n left: -$sp-5;\n }\n\n svg {\n display: inline-block;\n width: 100%;\n height: 100%;\n color: $link-color;\n visibility: hidden;\n }\n }\n\n .anchor-heading:hover,\n .anchor-heading:focus,\n h1:hover > .anchor-heading,\n h2:hover > .anchor-heading,\n h3:hover > .anchor-heading,\n h4:hover > .anchor-heading,\n h5:hover > .anchor-heading,\n h6:hover > .anchor-heading {\n svg {\n visibility: visible;\n }\n }\n\n summary {\n cursor: pointer;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n #toctitle {\n position: relative;\n margin-top: 1.5em;\n margin-bottom: 0.25em;\n\n + table,\n + .table-wrapper,\n + .code-example,\n + .highlighter-rouge,\n + .sectionbody .listingblock {\n margin-top: 1em;\n }\n\n + p:not(.label) {\n margin-top: 0;\n }\n }\n\n > h1:first-child,\n > h2:first-child,\n > h3:first-child,\n > h4:first-child,\n > h5:first-child,\n > h6:first-child,\n > .sect1:first-child > h2,\n > .sect2:first-child > h3,\n > .sect3:first-child > h4,\n > .sect4:first-child > h5,\n > .sect5:first-child > h6 {\n margin-top: $sp-2;\n }\n}\n","// Main nav, breadcrumb, etc...\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity\n\n.nav-list {\n padding: 0;\n margin-top: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-list-item {\n @include fs-4;\n\n position: relative;\n margin: 0;\n\n @include mq(md) {\n @include fs-3;\n }\n\n .nav-list-link {\n display: block;\n min-height: $nav-list-item-height-sm;\n padding-top: $sp-1;\n padding-bottom: $sp-1;\n line-height: #{$nav-list-item-height-sm - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height-sm;\n padding-left: $gutter-spacing-sm;\n } @else {\n padding-right: $gutter-spacing-sm;\n padding-left: $nav-list-item-height-sm;\n }\n\n @include mq(md) {\n min-height: $nav-list-item-height;\n line-height: #{$nav-list-item-height - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height;\n padding-left: $gutter-spacing;\n } @else {\n padding-right: $gutter-spacing;\n padding-left: $nav-list-item-height;\n }\n }\n\n &.external > svg {\n width: $sp-4;\n height: $sp-4;\n vertical-align: text-bottom;\n }\n\n &.active {\n font-weight: 600;\n text-decoration: none;\n }\n\n &:hover,\n &.active {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n }\n }\n\n .nav-list-expander {\n position: absolute;\n @if $nav-list-expander-right {\n right: 0;\n }\n\n width: $nav-list-item-height-sm;\n height: $nav-list-item-height-sm;\n padding: #{$nav-list-item-height-sm * 0.25};\n color: $link-color;\n\n @include mq(md) {\n width: $nav-list-item-height;\n height: $nav-list-item-height;\n padding: #{$nav-list-item-height * 0.25};\n }\n\n &:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n }\n\n @if $nav-list-expander-right {\n svg {\n transform: rotate(90deg);\n }\n }\n }\n\n > .nav-list {\n display: none;\n padding-left: $sp-3;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n\n .nav-list-link {\n color: $nav-child-link-color;\n }\n\n .nav-list-expander {\n color: $nav-child-link-color;\n }\n }\n }\n\n &.active {\n > .nav-list-expander svg {\n @if $nav-list-expander-right {\n transform: rotate(-90deg);\n } @else {\n transform: rotate(90deg);\n }\n }\n\n > .nav-list {\n display: block;\n }\n }\n }\n}\n\n.nav-category {\n padding: $sp-2 $gutter-spacing-sm;\n font-weight: 600;\n text-align: start;\n text-transform: uppercase;\n border-bottom: $border $border-color;\n @include fs-2;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing;\n margin-top: $gutter-spacing-sm;\n text-align: start;\n\n &:first-child {\n margin-top: 0;\n }\n }\n}\n\n.nav-list.nav-category-list {\n > .nav-list-item {\n margin: 0;\n\n > .nav-list {\n padding: 0;\n\n > .nav-list-item {\n > .nav-list-link {\n color: $link-color;\n }\n\n > .nav-list-expander {\n color: $link-color;\n }\n }\n }\n }\n}\n\n// Aux nav\n\n.aux-nav {\n height: 100%;\n overflow-x: auto;\n @include fs-2;\n\n .aux-nav-list {\n display: flex;\n height: 100%;\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n .aux-nav-list-item {\n display: inline-block;\n height: 100%;\n padding: 0;\n margin: 0;\n }\n\n @include mq(md) {\n padding-right: $gutter-spacing-sm;\n }\n}\n\n// Breadcrumb nav\n\n.breadcrumb-nav {\n @include mq(md) {\n margin-top: -$sp-4;\n }\n}\n\n.breadcrumb-nav-list {\n padding-left: 0;\n margin-bottom: $sp-3;\n list-style: none;\n}\n\n.breadcrumb-nav-list-item {\n display: table-cell;\n @include fs-2;\n\n &::before {\n display: none;\n }\n\n &::after {\n display: inline-block;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $grey-dk-000;\n content: \"/\";\n }\n\n &:last-child {\n &::after {\n content: \"\";\n }\n }\n}\n","// Typography\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\nh1,\n.text-alpha {\n @include fs-8;\n\n font-weight: 300;\n}\n\nh2,\n.text-beta,\n#toctitle {\n @include fs-6;\n}\n\nh3,\n.text-gamma {\n @include fs-5;\n}\n\nh4,\n.text-delta {\n @include fs-2;\n\n font-weight: 400;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n}\n\nh4 code {\n text-transform: none;\n}\n\nh5,\n.text-epsilon {\n @include fs-3;\n}\n\nh6,\n.text-zeta {\n @include fs-2;\n}\n\n.text-small {\n @include fs-2;\n}\n\n.text-mono {\n font-family: $mono-font-family !important;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n","// Labels (not the form kind)\n\n// this :not() prevents a style clash with Mermaid.js's\n// diagram labels, which also use .label\n// for more, see https://github.com/just-the-docs/just-the-docs/issues/1272\n// and the accompanying PR\n.label:not(g),\n.label-blue:not(g) {\n display: inline-block;\n padding: 0.16em 0.56em;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $white;\n text-transform: uppercase;\n vertical-align: middle;\n background-color: $blue-100;\n @include fs-2;\n\n border-radius: 12px;\n}\n\n.label-green:not(g) {\n background-color: $green-200;\n}\n\n.label-purple:not(g) {\n background-color: $purple-100;\n}\n\n.label-red:not(g) {\n background-color: $red-200;\n}\n\n.label-yellow:not(g) {\n color: $grey-dk-200;\n background-color: $yellow-200;\n}\n","// Buttons and things that look like buttons\n// stylelint-disable color-named\n\n.btn {\n display: inline-block;\n box-sizing: border-box;\n padding: 0.3em 1em;\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n line-height: 1.5;\n color: $link-color;\n text-decoration: none;\n vertical-align: baseline;\n cursor: pointer;\n background-color: $base-button-color;\n border-width: 0;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n appearance: none;\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: darken($link-color, 2%);\n }\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n text-decoration: none;\n background-color: darken($base-button-color, 1%);\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($base-button-color, 3%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken(#dcdcdc, 5%);\n }\n\n &:disabled,\n &.disabled {\n &,\n &:hover {\n color: rgba(102, 102, 102, 0.5);\n cursor: default;\n background-color: rgba(229, 229, 229, 0.5);\n background-image: none;\n box-shadow: none;\n }\n }\n}\n\n.btn-outline {\n color: $link-color;\n background: transparent;\n box-shadow: inset 0 0 0 2px $grey-lt-300;\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n color: darken($link-color, 4%);\n text-decoration: none;\n background-color: transparent;\n box-shadow: inset 0 0 0 3px $grey-lt-300;\n }\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow:\n inset 0 0 0 2px $grey-dk-100,\n 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: inset 0 0 0 2px $grey-dk-100;\n }\n}\n\n.btn-primary {\n @include btn-color($white, $btn-primary-color);\n}\n\n.btn-purple {\n @include btn-color($white, $purple-100);\n}\n\n.btn-blue {\n @include btn-color($white, $blue-000);\n}\n\n.btn-green {\n @include btn-color($white, $green-100);\n}\n\n.btn-reset {\n background: none;\n border: none;\n margin: 0;\n text-align: inherit;\n font: inherit;\n border-radius: 0;\n appearance: none;\n}\n","// Colored button\n\n@mixin btn-color($fg, $bg) {\n color: $fg;\n background-color: darken($bg, 2%);\n background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%));\n box-shadow:\n 0 1px 3px rgba(0, 0, 0, 0.25),\n 0 4px 10px rgba(0, 0, 0, 0.12);\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: $fg;\n background-color: darken($bg, 4%);\n background-image: linear-gradient((lighten($bg, 2%), darken($bg, 4%)));\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($bg, 5%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken($bg, 10%);\n }\n}\n","// Search input and autocomplete\n\n.search {\n position: relative;\n z-index: 2;\n flex-grow: 1;\n height: $sp-10;\n padding: $sp-2;\n transition: padding linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: relative !important;\n width: auto !important;\n height: 100% !important;\n padding: 0;\n transition: none;\n }\n}\n\n.search-input-wrap {\n position: relative;\n z-index: 1;\n height: $sp-8;\n overflow: hidden;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n transition: height linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: absolute;\n width: 100%;\n max-width: $search-results-width;\n height: 100% !important;\n border-radius: 0;\n box-shadow: none;\n transition: width ease $transition-duration;\n }\n}\n\n.search-input {\n position: absolute;\n width: 100%;\n height: 100%;\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing-sm + $sp-5};\n font-size: 1rem;\n color: $body-text-color;\n background-color: $search-background-color;\n border-top: 0;\n border-right: 0;\n border-bottom: 0;\n border-left: 0;\n border-radius: 0;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing + $sp-5};\n font-size: 0.875rem;\n background-color: $body-background-color;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n &:focus {\n outline: 0;\n\n + .search-label .search-icon {\n color: $link-color;\n }\n }\n}\n\n.search-label {\n position: absolute;\n display: flex;\n height: 100%;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-left: $gutter-spacing;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n .search-icon {\n width: #{$sp-4 * 1.2};\n height: #{$sp-4 * 1.2};\n align-self: center;\n color: $grey-dk-000;\n }\n}\n\n.search-results {\n position: absolute;\n left: 0;\n display: none;\n width: 100%;\n max-height: calc(100% - #{$sp-10});\n overflow-y: auto;\n background-color: $search-background-color;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n\n @include mq(md) {\n top: 100%;\n width: $search-results-width;\n max-height: calc(100vh - 200%) !important;\n }\n}\n\n.search-results-list {\n padding-left: 0;\n margin-bottom: $sp-1;\n list-style: none;\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n}\n\n.search-results-list-item {\n padding: 0;\n margin: 0;\n}\n\n.search-result {\n display: block;\n padding: $sp-1 $sp-3;\n\n &:hover,\n &.active {\n background-color: $feedback-color;\n }\n}\n\n.search-result-title {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 40%;\n padding-right: $sp-2;\n vertical-align: top;\n }\n}\n\n.search-result-doc {\n display: flex;\n align-items: center;\n word-wrap: break-word;\n\n &.search-result-doc-parent {\n opacity: 0.5;\n @include fs-3;\n\n @include mq(md) {\n @include fs-2;\n }\n }\n\n .search-result-icon {\n width: $sp-4;\n height: $sp-4;\n margin-right: $sp-2;\n color: $link-color;\n flex-shrink: 0;\n }\n\n .search-result-doc-title {\n overflow: auto;\n }\n}\n\n.search-result-section {\n margin-left: #{$sp-4 + $sp-2};\n word-wrap: break-word;\n}\n\n.search-result-rel-url {\n display: block;\n margin-left: #{$sp-4 + $sp-2};\n overflow: hidden;\n color: $search-result-preview-color;\n text-overflow: ellipsis;\n white-space: nowrap;\n @include fs-1;\n}\n\n.search-result-previews {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n padding-left: $sp-4;\n margin-left: $sp-2;\n color: $search-result-preview-color;\n word-wrap: break-word;\n border-left: $border;\n border-left-color: $border-color;\n @include fs-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 60%;\n padding-left: $sp-2;\n margin-left: 0;\n vertical-align: top;\n }\n}\n\n.search-result-preview + .search-result-preview {\n margin-top: $sp-1;\n}\n\n.search-result-highlight {\n font-weight: bold;\n}\n\n.search-no-result {\n padding: $sp-2 $sp-3;\n @include fs-3;\n}\n\n.search-button {\n position: fixed;\n right: $sp-4;\n bottom: $sp-4;\n display: flex;\n width: $sp-9;\n height: $sp-9;\n background-color: $search-background-color;\n border: 1px solid rgba($link-color, 0.3);\n border-radius: #{$sp-9 * 0.5};\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n align-items: center;\n justify-content: center;\n}\n\n.search-overlay {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1;\n width: 0;\n height: 0;\n background-color: rgba(0, 0, 0, 0.3);\n opacity: 0;\n transition:\n opacity ease $transition-duration,\n width 0s $transition-duration,\n height 0s $transition-duration;\n}\n\n.search-active {\n .search {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .search-input-wrap {\n height: $sp-10;\n border-radius: 0;\n\n @include mq(md) {\n width: $search-results-width;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n }\n }\n\n .search-input {\n background-color: $search-background-color;\n\n @include mq(md) {\n padding-left: 2.3rem;\n }\n }\n\n .search-label {\n @include mq(md) {\n padding-left: 0.6rem;\n }\n }\n\n .search-results {\n display: block;\n }\n\n .search-overlay {\n width: 100%;\n height: 100%;\n opacity: 1;\n transition:\n opacity ease $transition-duration,\n width 0s,\n height 0s;\n }\n\n @include mq(md) {\n .main {\n position: fixed;\n right: 0;\n left: 0;\n }\n }\n\n .main-header {\n padding-top: $sp-10;\n\n @include mq(md) {\n padding-top: 0;\n }\n }\n}\n","// Tables\n// stylelint-disable max-nesting-depth, selector-no-type, selector-max-type\n\n.table-wrapper {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: $sp-5;\n overflow-x: auto;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n}\n\ntable {\n display: table;\n min-width: 100%;\n border-collapse: separate;\n}\n\nth,\ntd {\n @include fs-3;\n\n min-width: 7.5rem;\n padding: $sp-2 $sp-3;\n background-color: $table-background-color;\n border-bottom: $border rgba($border-color, 0.5);\n border-left: $border $border-color;\n\n &:first-of-type {\n border-left: 0;\n }\n}\n\ntbody {\n tr {\n &:last-of-type {\n th,\n td {\n border-bottom: 0;\n }\n\n td {\n padding-bottom: $sp-3;\n }\n }\n }\n}\n\nthead {\n th {\n border-bottom: $border $border-color;\n }\n}\n","// Code and syntax highlighting\n// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type, scss/comment-no-empty\n\n// {% raw %}\n\n// This instruction applies to all queues not within 'pre' or 'figure', avoiding 'code' generated by the highlight.\n:not(pre, figure) {\n & > code {\n padding: 0.2em 0.15em;\n font-weight: 400;\n background-color: $code-background-color;\n border: $border $border-color;\n border-radius: $border-radius;\n }\n}\n\n// Avoid appearance of dark border around visited code links in Safari\na:visited code {\n border-color: $border-color;\n}\n\n// Content structure for highlighted code blocks using fences or Liquid\n//\n// ```[LANG]...```, no kramdown line_numbers:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n//\n// ```[LANG]...```, kramdown line_numbers = true:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.rouge-gutter.gl > pre.lineno\n// | td.rouge-code > pre\n//\n// {% highlight LANG %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n//\n// {% highlight LANG linenos %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.gutter.gl > pre.lineno\n// | td.code > pre\n//\n// ----...---- (AsciiDoc)\n// div.listingblock > div.content > pre.rouge.highlight\n//\n// fix_linenos removes the outermost pre when it encloses table.rouge-table\n//\n// See docs/index-test.md for some tests.\n//\n// No kramdown line_numbers: fences and Liquid highlighting look the same.\n// Kramdown line_numbers = true: fences have a wider gutter than with Liquid?\n\n// ```[LANG]...```\n// or in AsciiDoc:\n//\n// ----\n// ...\n// ----\n\n// the code may appear with 3 different types:\n// container \\ case: default case, code with line number, code with html rendering\n// top level: div.highlighter-rouge, figure.highlight, figure.highlight\n// second level: div.highlight, div.table-wrapper, pre.highlight\n// third level: pre.highlight, td.code, absent\n// last level: code, pre, code (optionality)\n// highlighter level: span, span, span\n// the spacing are only in the second level for case 1, 3 and in the third level for case 2\n// in AsciiDoc, there is a parent container that contains optionally a title and the content.\n\n// select top level container\ndiv.highlighter-rouge,\ndiv.listingblock > div.content,\nfigure.highlight {\n margin-top: 0;\n margin-bottom: $sp-3;\n background-color: $code-background-color;\n border-radius: $border-radius;\n box-shadow: none;\n -webkit-overflow-scrolling: touch;\n position: relative;\n padding: 0;\n\n // copy button (or other button)\n // the button appear only when there is a hover on the code or focus on button\n > button {\n width: $sp-3;\n opacity: 0;\n position: absolute;\n top: 0;\n right: 0;\n border: $sp-3 solid $code-background-color;\n background-color: $code-background-color;\n color: $body-text-color;\n box-sizing: content-box;\n\n svg {\n fill: $body-text-color;\n }\n\n &:active {\n text-decoration: none;\n outline: none;\n opacity: 1;\n }\n\n &:focus {\n opacity: 1;\n }\n }\n\n // the button can be seen by doing a simple hover in the code, there is no need to go over the location of the button\n &:hover {\n > button {\n cursor: copy;\n opacity: 1;\n }\n }\n}\n\n// setting the spacing and scrollbar on the second level for the first case\n// remove all space on the second and third level\n// this is a mixin to accommodate for the slightly different structures generated via Markdown vs AsciiDoc\n@mixin scroll-and-spacing($code-div, $pre-select) {\n #{$code-div} {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 0;\n }\n\n #{$pre-select},\n code {\n padding: 0;\n margin: 0;\n border: 0;\n }\n}\n\n// for Markdown\ndiv.highlighter-rouge {\n @include scroll-and-spacing(\"div.highlight\", \"pre.highlight\");\n}\n\n// for AsciiDoc. we also need to fix the margins for its parent container.\ndiv.listingblock {\n @include scroll-and-spacing(\"div.content\", \"div.content > pre\");\n\n margin-top: 0;\n margin-bottom: $sp-3;\n}\n\n// {% highlight LANG %}...{% endhighlight %},\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the second level for the thirt case\n// the css rule are apply only to the last code enviroment\n// setting the scroolbar\nfigure.highlight {\n pre,\n :not(pre) > code {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 0;\n }\n}\n\n// ```[LANG]...```, kramdown line_numbers = true,\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the thirt level for the second case\n.highlight .table-wrapper {\n padding: $sp-3 0;\n margin: 0;\n border: 0;\n box-shadow: none;\n\n td,\n pre {\n @include fs-2;\n\n min-width: 0;\n padding: 0;\n background-color: $code-background-color;\n border: 0;\n }\n\n td.gl {\n width: 1em;\n padding-right: $sp-3;\n padding-left: $sp-3;\n }\n\n pre {\n margin: 0;\n line-height: 2;\n }\n}\n\n// Code examples: html render of a code\n.code-example,\n.listingblock > .title {\n padding: $sp-3;\n margin-bottom: $sp-3;\n overflow: auto;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n\n + .highlighter-rouge,\n + .sectionbody .listingblock,\n + .content,\n + figure.highlight {\n position: relative;\n margin-top: -$sp-4;\n border-right: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n border-left: 1px solid $border-color;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n\n// Mermaid diagram code blocks should be left unstyled.\ncode.language-mermaid {\n padding: 0;\n background-color: inherit;\n border: 0;\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight,\npre.highlight {\n background: $code-background-color; // Code Background\n // For Backwards Compatibility Before $code-linenumber-color was added\n @if variable-exists(code-linenumber-color) {\n color: $code-linenumber-color; // Code Line Numbers\n } @else {\n color: $body-text-color; // Code Line Numbers\n }\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight pre {\n background: $code-background-color; // Code Background\n}\n\n// {% endraw %}\n","// Utility classes for colors\n\n// Text colors\n\n.text-grey-dk-000 {\n color: $grey-dk-000 !important;\n}\n\n.text-grey-dk-100 {\n color: $grey-dk-100 !important;\n}\n\n.text-grey-dk-200 {\n color: $grey-dk-200 !important;\n}\n\n.text-grey-dk-250 {\n color: $grey-dk-250 !important;\n}\n\n.text-grey-dk-300 {\n color: $grey-dk-300 !important;\n}\n\n.text-grey-lt-000 {\n color: $grey-lt-000 !important;\n}\n\n.text-grey-lt-100 {\n color: $grey-lt-100 !important;\n}\n\n.text-grey-lt-200 {\n color: $grey-lt-200 !important;\n}\n\n.text-grey-lt-300 {\n color: $grey-lt-300 !important;\n}\n\n.text-blue-000 {\n color: $blue-000 !important;\n}\n\n.text-blue-100 {\n color: $blue-100 !important;\n}\n\n.text-blue-200 {\n color: $blue-200 !important;\n}\n\n.text-blue-300 {\n color: $blue-300 !important;\n}\n\n.text-green-000 {\n color: $green-000 !important;\n}\n\n.text-green-100 {\n color: $green-100 !important;\n}\n\n.text-green-200 {\n color: $green-200 !important;\n}\n\n.text-green-300 {\n color: $green-300 !important;\n}\n\n.text-purple-000 {\n color: $purple-000 !important;\n}\n\n.text-purple-100 {\n color: $purple-100 !important;\n}\n\n.text-purple-200 {\n color: $purple-200 !important;\n}\n\n.text-purple-300 {\n color: $purple-300 !important;\n}\n\n.text-yellow-000 {\n color: $yellow-000 !important;\n}\n\n.text-yellow-100 {\n color: $yellow-100 !important;\n}\n\n.text-yellow-200 {\n color: $yellow-200 !important;\n}\n\n.text-yellow-300 {\n color: $yellow-300 !important;\n}\n\n.text-red-000 {\n color: $red-000 !important;\n}\n\n.text-red-100 {\n color: $red-100 !important;\n}\n\n.text-red-200 {\n color: $red-200 !important;\n}\n\n.text-red-300 {\n color: $red-300 !important;\n}\n\n// Background colors\n\n.bg-grey-dk-000 {\n background-color: $grey-dk-000 !important;\n}\n\n.bg-grey-dk-100 {\n background-color: $grey-dk-100 !important;\n}\n\n.bg-grey-dk-200 {\n background-color: $grey-dk-200 !important;\n}\n\n.bg-grey-dk-250 {\n background-color: $grey-dk-250 !important;\n}\n\n.bg-grey-dk-300 {\n background-color: $grey-dk-300 !important;\n}\n\n.bg-grey-lt-000 {\n background-color: $grey-lt-000 !important;\n}\n\n.bg-grey-lt-100 {\n background-color: $grey-lt-100 !important;\n}\n\n.bg-grey-lt-200 {\n background-color: $grey-lt-200 !important;\n}\n\n.bg-grey-lt-300 {\n background-color: $grey-lt-300 !important;\n}\n\n.bg-blue-000 {\n background-color: $blue-000 !important;\n}\n\n.bg-blue-100 {\n background-color: $blue-100 !important;\n}\n\n.bg-blue-200 {\n background-color: $blue-200 !important;\n}\n\n.bg-blue-300 {\n background-color: $blue-300 !important;\n}\n\n.bg-green-000 {\n background-color: $green-000 !important;\n}\n\n.bg-green-100 {\n background-color: $green-100 !important;\n}\n\n.bg-green-200 {\n background-color: $green-200 !important;\n}\n\n.bg-green-300 {\n background-color: $green-300 !important;\n}\n\n.bg-purple-000 {\n background-color: $purple-000 !important;\n}\n\n.bg-purple-100 {\n background-color: $purple-100 !important;\n}\n\n.bg-purple-200 {\n background-color: $purple-200 !important;\n}\n\n.bg-purple-300 {\n background-color: $purple-300 !important;\n}\n\n.bg-yellow-000 {\n background-color: $yellow-000 !important;\n}\n\n.bg-yellow-100 {\n background-color: $yellow-100 !important;\n}\n\n.bg-yellow-200 {\n background-color: $yellow-200 !important;\n}\n\n.bg-yellow-300 {\n background-color: $yellow-300 !important;\n}\n\n.bg-red-000 {\n background-color: $red-000 !important;\n}\n\n.bg-red-100 {\n background-color: $red-100 !important;\n}\n\n.bg-red-200 {\n background-color: $red-200 !important;\n}\n\n.bg-red-300 {\n background-color: $red-300 !important;\n}\n","// Utility classes for layout\n\n// Display\n\n.d-block {\n display: block !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .d-sm-block, .d-md-none, .d-lg-inline\n .d-#{$media-query}-block {\n display: block !important;\n }\n .d-#{$media-query}-flex {\n display: flex !important;\n }\n .d-#{$media-query}-inline {\n display: inline !important;\n }\n .d-#{$media-query}-inline-block {\n display: inline-block !important;\n }\n .d-#{$media-query}-none {\n display: none !important;\n }\n }\n }\n}\n\n// Horizontal alignment\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.flex-justify-start {\n justify-content: flex-start !important;\n}\n\n.flex-justify-end {\n justify-content: flex-end !important;\n}\n\n.flex-justify-between {\n justify-content: space-between !important;\n}\n\n.flex-justify-around {\n justify-content: space-around !important;\n}\n\n// Vertical alignment\n\n.v-align-baseline {\n vertical-align: baseline !important;\n}\n\n.v-align-bottom {\n vertical-align: bottom !important;\n}\n\n.v-align-middle {\n vertical-align: middle !important;\n}\n\n.v-align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.v-align-text-top {\n vertical-align: text-top !important;\n}\n\n.v-align-top {\n vertical-align: top !important;\n}\n","// Utility classes for typography\n\n.fs-1 {\n @include fs-1;\n}\n\n.fs-2 {\n @include fs-2;\n}\n\n.fs-3 {\n @include fs-3;\n}\n\n.fs-4 {\n @include fs-4;\n}\n\n.fs-5 {\n @include fs-5;\n}\n\n.fs-6 {\n @include fs-6;\n}\n\n.fs-7 {\n @include fs-7;\n}\n\n.fs-8 {\n @include fs-8;\n}\n\n.fs-9 {\n @include fs-9;\n}\n\n.fs-10 {\n @include fs-10;\n}\n\n.fw-300 {\n font-weight: 300 !important;\n}\n\n.fw-400 {\n font-weight: 400 !important;\n}\n\n.fw-500 {\n font-weight: 500 !important;\n}\n\n.fw-700 {\n font-weight: 700 !important;\n}\n\n.lh-0 {\n line-height: 0 !important;\n}\n\n.lh-default {\n line-height: $body-line-height;\n}\n\n.lh-tight {\n line-height: $body-heading-line-height;\n}\n\n.ls-5 {\n letter-spacing: 0.05em !important;\n}\n\n.ls-10 {\n letter-spacing: 0.1em !important;\n}\n\n.ls-0 {\n letter-spacing: 0 !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n","// Utility classes for lists\n\n// stylelint-disable selector-max-type\n\n.list-style-none {\n padding: 0 !important;\n margin: 0 !important;\n list-style: none !important;\n\n li {\n &::before {\n display: none !important;\n }\n }\n}\n","// Utility classes for margins and padding\n\n// stylelint-disable block-opening-brace-space-after, block-opening-brace-space-before\n\n// Margin spacer utilities\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-0, .m-1, .m-2...\n .m-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n .mx-#{$scale}-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-sm-0, .m-md-1, .m-lg-2...\n .m-#{$media-query}-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$media-query}-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$media-query}-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$media-query}-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n }\n }\n}\n\n// Padding spacer utilities\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-0, .p-1, .p-2...\n .p-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @include mq($media-query) {\n @for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-sm-0, .p-md-1, .p-lg-2...\n .p-#{$media-query}-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$media-query}-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$media-query}-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n }\n }\n}\n","// stylelint-disable selector-max-specificity, selector-max-id, selector-max-type, selector-no-qualifying-type\n\n@media print {\n .site-footer,\n .site-button,\n #edit-this-page,\n #back-to-top,\n .site-nav,\n .main-header {\n display: none !important;\n }\n\n .side-bar {\n width: 100%;\n height: auto;\n border-right: 0 !important;\n }\n\n .site-header {\n border-bottom: 1px solid $border-color;\n }\n\n .site-title {\n font-size: 1rem !important;\n font-weight: 700 !important;\n }\n\n .text-small {\n font-size: 8pt !important;\n }\n\n pre.highlight {\n border: 1px solid $border-color;\n }\n\n .main {\n max-width: none;\n margin-left: 0;\n }\n}\n","// Skipnav\n// Skip to main content\n\na.skip-to-main {\n left: -999px;\n position: absolute;\n top: auto;\n width: 1px;\n height: 1px;\n overflow: hidden;\n z-index: -999;\n}\n\na.skip-to-main:focus,\na.skip-to-main:active {\n color: $link-color;\n background-color: $body-background-color;\n left: auto;\n top: auto;\n width: 30%;\n height: auto;\n overflow: auto;\n margin: 10px 35%;\n padding: 5px;\n border-radius: 15px;\n border: 4px solid $btn-primary-color;\n text-align: center;\n font-size: 1.2em;\n z-index: 999;\n}\n","\n$logo: \"/assets/images/logo.png\";\n\n@import \"./support/support\";\n@import \"./custom/setup\";\n@import \"./color_schemes/light\";\n\n@import \"./color_schemes/dark\";\n\n@import \"./modules\";\ndiv.opaque {\n background-color: $body-background-color;\n}p.warning, blockquote.warning {\n background: rgba($yellow-300, 0.2);\n border-left: $border-radius solid $yellow-000;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $yellow-000;\n content: \"Warning\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .warning-title {\n color: $yellow-000;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.warning-title, blockquote.warning-title {\n background: rgba($yellow-300, 0.2);\n border-left: $border-radius solid $yellow-000;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $yellow-000;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.warning {\n margin-left: 0;\n margin-right: 0;\n \n > p:first-child {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.warning-title {\n margin-left: 0;\n margin-right: 0;\n \n > p:nth-child(2) {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\np.danger, blockquote.danger {\n background: rgba($red-300, 0.2);\n border-left: $border-radius solid $red-000;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $red-000;\n content: \"Danger\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .danger-title {\n color: $red-000;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.danger-title, blockquote.danger-title {\n background: rgba($red-300, 0.2);\n border-left: $border-radius solid $red-000;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $red-000;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.danger {\n margin-left: 0;\n margin-right: 0;\n \n > p:first-child {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.danger-title {\n margin-left: 0;\n margin-right: 0;\n \n > p:nth-child(2) {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\np.note, blockquote.note {\n background: rgba($iueblue-300, 0.2);\n border-left: $border-radius solid $iueblue-000;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $iueblue-000;\n content: \"Note\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .note-title {\n color: $iueblue-000;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.note-title, blockquote.note-title {\n background: rgba($iueblue-300, 0.2);\n border-left: $border-radius solid $iueblue-000;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $iueblue-000;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.note {\n margin-left: 0;\n margin-right: 0;\n \n > p:first-child {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.note-title {\n margin-left: 0;\n margin-right: 0;\n \n > p:nth-child(2) {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n@import \"./custom/custom\";\n\n\n","$iueblue-000: #005077;\n$iueblue-100: #005077;\n$iueblue-200: #005077;\n$iueblue-300: #005077;"],"file":"just-the-docs-dark.css"} \ No newline at end of file diff --git a/docs/_site/assets/css/just-the-docs-default.css.map b/docs/_site/assets/css/just-the-docs-default.css.map index 6ff56b02..6bbe9dc8 100644 --- a/docs/_site/assets/css/just-the-docs-default.css.map +++ b/docs/_site/assets/css/just-the-docs-default.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/vendor/OneLightJekyll/syntax.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/vendor/normalize.scss/normalize.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/base.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/color_schemes/light.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/support/mixins/_typography.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/support/mixins/_layout.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/support/_variables.scss","../../_sass/custom/setup.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/layout.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/content.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/navigation.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/typography.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/labels.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/buttons.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/support/mixins/_buttons.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/search.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/tables.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/code.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/utilities/_colors.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/utilities/_layout.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/utilities/_typography.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/utilities/_lists.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/utilities/_spacing.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/print.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/skiptomain.scss","just-the-docs-default.scss"],"names":[],"mappings":"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EACA;;;AAGF;EACE,OK7DY;EL8DZ;;;AAGF;EACE;EACA,uBI/BY;EJgCZ;;AAEA;EACE;;;AAIJ;EACE,aIvEiB;EJwEjB;EACA,aIvEiB;;;AJ0EnB;AAAA;EAEE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA,kBI/DY;EJgEZ;;;AAIF;EACE;EAGA;EACA;EACA;EACA;;;AM7GF;EACE;EACA;EACA;EACA,kBF6BY;;ADrBV;EGZJ;IAOI;IACA;IACA,OFwFW;IEvFX;IACA;IACA;;;AHAA;EGZJ;IAgBI;IACA,WF+EQ;;;;ADpFR;EGSJ;IAEI;IACA,WF6EY;IE5EZ,aFwEW;;;ADrFX;EGSJ;IAUI;;;;AAQJ;EHhBE,eCuDK;EDtDL,cCsDK;EEpCL,aFoCK;EEnCL,gBFmCK;;ADlEH;EG2BJ;IHZI,eCqDG;IDpDH,cCoDG;;;ADpEH;EG2BJ;IAOI,aFkCG;IEjCH,gBFiCG;;;;AE7BP;EACE;EACA;EACA,kBFrBY;;ADrBV;EGuCJ;IAMI;IACA;IACA,QF2CY;IE1CZ,kBFjCI;IEkCJ;;;AAGF;EACE;;AHrDA;EGoDF;IAII;;;;AAKN;AAAA;AAAA;EAGE;;AHhEE;EG6DJ;AAAA;AAAA;IAMI,OFiBQ;;;;AEbZ;EACE;;AAEA;EACE;;AH3EA;EGuEJ;IAQI;IACA,aFVG;IEWH,gBFfG;IEgBH;IACA;;;;AAIJ;EACE;EACA,YFCc;EEAd;;AH1FE;EGuFJ;IAMI,QFHY;IEIZ,YFJY;IEKZ;;;;AAIJ;EHxFE,eCuDK;EDtDL,cCsDK;EEoCL;EACA;EACA;EACA;EACA,aFzCK;EE0CL,gBF1CK;EE2CL,OFxFY;EFOZ;;AC3BE;EGmGJ;IHpFI,eCqDG;IDpDH,cCoDG;;;ADpEH;EGmGJ;IJrEI;IACA,aEpCuB;;;ADKvB;EGmGJ;IAaI,aFhDG;IEiDH,gBFjDG;;;;AEsDL;EACE;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA,SFjEK;EEkEL;;;AHpIE;EGwIF;IACE;;;AAIJ;EACE;;;AAQF;EACE;;;AASF;EACE;EACA,gBF1FM;EE2FN;;AHnKE;EGg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ACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AE3HF;EACE;EACA;EACA;EACA,QTgFM;ES/EN,STuEK;EStEL;;AVME;EUZJ;IASI;IACA;IACA;IACA;IACA;;;;AAIJ;EACE;EACA;EACA,QT8DK;ES7DL;EACA,eTmEc;ESlEd,YACE;EAEF;;AVdE;EUKJ;IAYI;IACA;IACA,WTwEmB;ISvEnB;IACA;IACA;IACA;;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA,OThBY;ESiBZ,kBTnBM;ESoBN;EACA;EACA;EACA;EACA;;AVvCE;EU2BJ;IAeI;IACA;IACA,kBT7BI;IS8BJ;;;AAGF;EACE;;AAEA;EACE,ORlEQ;;;AQuEd;EACE;EACA;EACA;EACA,cTKK;;ADlEH;EUyDJ;IAOI,cTIG;ISHH;;;AAGF;EACE;EACA;EACA;EACA,OTxDU;;;AS4Dd;EACE;EACA;EACA;EACA;EACA;EACA;EACA,kBTpEM;ESqEN,4BTPc;ESQd,2BTRc;ESSd,YACE;;AVvFA;EU4EJ;IAeI;IACA,OTDmB;ISEnB;;;;AAIJ;EACE;EACA,eTpCK;ESqCL;EXzFA;;ACXE;EUiGJ;IXnFI;;;ACdA;EUiGJ;IX9FE;;;ACHE;EUiGJ;IX3FI;;;;AWsGJ;EACE;EACA;;;AAGF;EACE;EACA;;AAEA;EAEE,kBZ3Ha;;;AY+HjB;EACE;EACA,aT7DK;ES8DL,gBT9DK;;ADhEH;EU2HJ;IAMI;IACA;IACA,eTnEG;ISoEH;;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;EX3IF;;ACHE;EU6IF;IXvIE;;;ACNA;EU6IF;IXlJA;;;ACKE;EU6IF;IX/IE;;;AWwJF;EACE,OTrFG;ESsFH,QTtFG;ESuFH,cTzFG;ES0FH,ORxKU;EQyKV;;AAGF;EACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA,OT5JY;ES6JZ;EACA;EX3LA;;ACaE;EUwKJ;IXlLI;;;;AW4LJ;EACE;EACA,aTpHK;ESqHL,gBTrHK;ESsHL,cTpHK;ESqHL,aTvHK;ESwHL,OTxKY;ESyKZ;EACA,aT9GO;ES+GP,mBTrKY;EF3BZ;;ACKE;EUkLJ;IXpLI;;;ACEA;EUkLJ;IAaI;IACA;IACA,cTjIG;ISkIH;IACA;;;;AAIJ;EACE,YTzIK;;;AS4IP;EACE;;;AAGF;EACE;EX7MA;;ACHE;EU+MJ;IXzMI;;;;AW8MJ;EACE;EACA,OTpJK;ESqJL,QTrJK;ESsJL;EACA,OTlJK;ESmJL,QTnJK;ESoJL,kBT5MM;ES6MN;EACA;EACA,YACE;EAEF;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YACE;;;AAMF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE,QTvLI;ESwLJ;;AVhQA;EU8PF;IAKI,OTxKiB;ISyKjB,YACE;;;AAKN;EACE,kBT5PI;;ADfJ;EU0QF;IAII;;;AV9QF;EUkRF;IAEI;;;AAIJ;EACE;;AAGF;EACE;EACA;EACA;EACA,YACE;;AVjSF;EUuSA;IACE;IACA;IACA;;;AAIJ;EACE,aTvOI;;ADxEJ;EU8SF;IAII;;;;AC7TN;EACE;EACA;EACA;EACA,eV0EK;EUzEL;EACA,eVkFc;EUjFd,YACE;;;AAIJ;EACE;EACA;EACA;;;AAGF;AAAA;EZJE;EYQA;EACA;EACA,kBVEM;EUDN;EACA;;AXfE;EWOJ;AAAA;IZDI;;;AYWF;AAAA;EACE;;;AAOE;AAAA;EAEE;;AAGF;EACE,gBVkCD;;;AU3BL;EACE;;;AC9CF;EACE;EACA;EACA,kBXyBU;EWxBV;EACA,eX+EY;;;AW1EhB;EACE,cXkBY;;;AWiCd;AAAA;AAAA;EAGE;EACA,eXMK;EWLL,kBXvCY;EWwCZ,eXgBc;EWfd;EACA;EACA;EACA;;AAIA;AAAA;AAAA;EACE,OXLG;EWMH;EACA;EACA;EACA;EACA;EACA,kBXvDU;EWwDV,OX5DU;EW6DV;;AAEA;AAAA;AAAA;EACE,MXhEQ;;AWmEV;AAAA;AAAA;EACE;EACA;EACA;;AAGF;AAAA;AAAA;EACE;;AAMF;AAAA;AAAA;EACE;EACA;;;AASJ;EACE;EACA,SX7CG;EW8CH;EACA;;AAGF;AAAA;EAEE;EACA;EACA;;;AAUJ;EAGE;EACA,eXpEK;;AW2CL;EACE;EACA,SX7CG;EW8CH;EACA;;AAGF;AAAA;EAEE;EACA;EACA;;;AAwBF;AAAA;EAEE;EACA,SXjFG;EWkFH;EACA;;;AAQJ;EACE;EACA;EACA;EACA;;AAEA;AAAA;EbvKA;Ea2KE;EACA;EACA,kBXnJU;EWoJV;;AZzKA;EYkKF;AAAA;IbpKE;;;Aa8KF;EACE;EACA,eX7GG;EW8GH,cX9GG;;AWiHL;EACE;EACA;;;AAKJ;AAAA;EAEE,SX1HK;EW2HL,eX3HK;EW4HL;EACA;EACA,eXlHc;;AWoHd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAIE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAKJ;EACE;EACA;EACA;;;AAIF;AAAA;EAEE,YXpMY;EWyMV,OX7MU;;;AWkNd;EACE,YX/MY;;;AY/Bd;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;ACvOF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AdPE;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAQR;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;ACjGF;EhBDE;;ACaE;EeZJ;IhBEI;;;;AgBEJ;EhBGE;;ACKE;EeRJ;IhBMI;;;;AgBFJ;EhBOE;;ACHE;EeJJ;IhBUI;;;;AgBNJ;EhBWE;;ACXE;EeAJ;IhBcI;;;;AgBVJ;EhBeE;;ACnBE;EeIJ;IhBkBI;;;;AgBdJ;EhBmBE;;AC3BE;EeQJ;IhBsBI;IACA,aEpCuB;;;;AciB3B;EhBwBE;EACA,aE1CyB;;ADKvB;EeYJ;IhB4BI;;;;AgBxBJ;EhB6BE;EACA,aEnDyB;;ADKvB;EegBJ;IhBiCI;;;;AgB7BJ;EhBkCE;EACA,aE5DyB;;ADKvB;EeoBJ;IhBsCI;;;;AgBlCJ;EhBuCE;EACA,aErEyB;;ADKvB;EewBJ;IhB2CI;;;;AgBvCJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE,adxDiB;;;Ac2DnB;EACE,ad1DyB;;;Ac6D3B;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AC/EF;EACE;EACA;EACA;;AAGE;EACE;;;ACLN;EACE;EACA;;;AAQA;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AjBlCA;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AAaN;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AjB7GA;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AC3JR;EACE;AAAA;AAAA;AAAA;AAAA;AAAA;IAME;;EAGF;IACE;IACA;IACA;;EAGF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;IACA;;;AClCJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE,OjBfY;EiBgBZ,kBlBaM;EkBZN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACjBF;EACE,kBnBiBM;;;AmBhBP;EACG;EACA;EACA,enB2EY;EmB1EZ;EACA;;AAEA;EACI,OnBiCK;EmBhCL;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OnBuBO;EmBtBP;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,enBgDY;EmB/CZ;EACA;;AACA;EACE;EACA;EACA,OnBKO;EmBJP;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACI;EACA;EACA,enBIY;EmBHZ;EACA;;AAEA;EACI,OnBlCE;EmBmCF;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OnB5CI;EmB6CJ;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,enBvBY;EmBwBZ;EACA;;AACA;EACE;EACA;EACA,OnB9DI;EmB+DJ;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACI;EACA;EACA,enBnEY;EmBoEZ;EACA;;AAEA;EACI,OlBhKM;EkBiKN;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlB1KQ;EkB2KR;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,enB9FY;EmB+FZ;EACA;;AACA;EACE;EACA;EACA,OlB5LQ;EkB6LR;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE","sourcesContent":["// Generated with OneLightJekyll applied to Atom's One Light theme\n\n.highlight,\npre.highlight {\n background: #f9f9f9;\n color: #383942;\n}\n.highlight pre {\n background: #f9f9f9;\n}\n.highlight .hll {\n background: #f9f9f9;\n}\n.highlight .c {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .err {\n color: #fff;\n background-color: #e05151;\n}\n.highlight .k {\n color: #a625a4;\n}\n.highlight .l {\n color: #50a04f;\n}\n.highlight .n {\n color: #383942;\n}\n.highlight .o {\n color: #383942;\n}\n.highlight .p {\n color: #383942;\n}\n.highlight .cm {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .cp {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .c1 {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .cs {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .ge {\n font-style: italic;\n}\n.highlight .gs {\n font-weight: 700;\n}\n.highlight .kc {\n color: #a625a4;\n}\n.highlight .kd {\n color: #a625a4;\n}\n.highlight .kn {\n color: #a625a4;\n}\n.highlight .kp {\n color: #a625a4;\n}\n.highlight .kr {\n color: #a625a4;\n}\n.highlight .kt {\n color: #a625a4;\n}\n.highlight .ld {\n color: #50a04f;\n}\n.highlight .m {\n color: #b66a00;\n}\n.highlight .s {\n color: #50a04f;\n}\n.highlight .na {\n color: #b66a00;\n}\n.highlight .nb {\n color: #ca7601;\n}\n.highlight .nc {\n color: #ca7601;\n}\n.highlight .no {\n color: #ca7601;\n}\n.highlight .nd {\n color: #ca7601;\n}\n.highlight .ni {\n color: #ca7601;\n}\n.highlight .ne {\n color: #ca7601;\n}\n.highlight .nf {\n color: #383942;\n}\n.highlight .nl {\n color: #ca7601;\n}\n.highlight .nn {\n color: #383942;\n}\n.highlight .nx {\n color: #383942;\n}\n.highlight .py {\n color: #ca7601;\n}\n.highlight .nt {\n color: #e35549;\n}\n.highlight .nv {\n color: #ca7601;\n}\n.highlight .ow {\n font-weight: 700;\n}\n.highlight .w {\n color: #f8f8f2;\n}\n.highlight .mf {\n color: #b66a00;\n}\n.highlight .mh {\n color: #b66a00;\n}\n.highlight .mi {\n color: #b66a00;\n}\n.highlight .mo {\n color: #b66a00;\n}\n.highlight .sb {\n color: #50a04f;\n}\n.highlight .sc {\n color: #50a04f;\n}\n.highlight .sd {\n color: #50a04f;\n}\n.highlight .s2 {\n color: #50a04f;\n}\n.highlight .se {\n color: #50a04f;\n}\n.highlight .sh {\n color: #50a04f;\n}\n.highlight .si {\n color: #50a04f;\n}\n.highlight .sx {\n color: #50a04f;\n}\n.highlight .sr {\n color: #0083bb;\n}\n.highlight .s1 {\n color: #50a04f;\n}\n.highlight .ss {\n color: #0083bb;\n}\n.highlight .bp {\n color: #ca7601;\n}\n.highlight .vc {\n color: #ca7601;\n}\n.highlight .vg {\n color: #ca7601;\n}\n.highlight .vi {\n color: #e35549;\n}\n.highlight .il {\n color: #b66a00;\n}\n.highlight .gu {\n color: #75715e;\n}\n.highlight .gd {\n color: #e05151;\n}\n.highlight .gi {\n color: #43d089;\n}\n.highlight .language-json .w + .s2 {\n color: #e35549;\n}\n.highlight .language-json .kc {\n color: #0083bb;\n}\n","/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput {\n /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect {\n /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// Base element style overrides\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\n:root {\n color-scheme: $color-scheme;\n}\n\n* {\n box-sizing: border-box;\n}\n\nhtml {\n @include fs-4;\n\n scroll-behavior: smooth;\n}\n\nbody {\n font-family: $body-font-family;\n font-size: inherit;\n line-height: $body-line-height;\n color: $body-text-color;\n background-color: $body-background-color;\n overflow-wrap: break-word;\n}\n\nol,\nul,\ndl,\npre,\naddress,\nblockquote,\ntable,\ndiv,\nhr,\nform,\nfieldset,\nnoscript .table-wrapper {\n margin-top: 0;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n#toctitle {\n margin-top: 0;\n margin-bottom: 1em;\n font-weight: 500;\n line-height: $body-heading-line-height;\n color: $body-heading-color;\n}\n\np {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n\na {\n color: $link-color;\n text-decoration: none;\n}\n\na:not([class]) {\n text-decoration: underline;\n text-decoration-color: $border-color;\n text-underline-offset: 2px;\n\n &:hover {\n text-decoration-color: rgba($link-color, 0.45);\n }\n}\n\ncode {\n font-family: $mono-font-family;\n font-size: 0.75em;\n line-height: $body-line-height;\n}\n\nfigure,\npre {\n margin: 0;\n}\n\nli {\n margin: 0.25em 0;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\nhr {\n height: 1px;\n padding: 0;\n margin: $sp-6 0;\n background-color: $border-color;\n border: 0;\n}\n\n// adds a GitHub-style sidebar to blockquotes\nblockquote {\n margin: 10px 0;\n\n // resets user-agent stylesheets for blockquotes\n margin-block-start: 0;\n margin-inline-start: 0;\n padding-left: 1rem;\n border-left: 3px solid $border-color;\n}\n","$color-scheme: light !default;\n$body-background-color: $white !default;\n$body-heading-color: $grey-dk-300 !default;\n$body-text-color: $grey-dk-100 !default;\n$link-color: $purple-000 !default;\n$nav-child-link-color: $grey-dk-100 !default;\n$sidebar-color: $grey-lt-000 !default;\n$base-button-color: #f7f7f7 !default;\n$btn-primary-color: $purple-100 !default;\n$code-background-color: $grey-lt-000 !default;\n$feedback-color: darken($sidebar-color, 3%) !default;\n$table-background-color: $white !default;\n$search-background-color: $white !default;\n$search-result-preview-color: $grey-dk-000 !default;\n\n@import \"./vendor/OneLightJekyll/syntax\";\n","@mixin fs-1 {\n font-size: $font-size-1 !important;\n\n @include mq(sm) {\n font-size: $font-size-1-sm !important;\n }\n}\n\n@mixin fs-2 {\n font-size: $font-size-2 !important;\n\n @include mq(sm) {\n font-size: $font-size-3 !important;\n }\n}\n\n@mixin fs-3 {\n font-size: $font-size-3 !important;\n\n @include mq(sm) {\n font-size: $font-size-4 !important;\n }\n}\n\n@mixin fs-4 {\n font-size: $font-size-4 !important;\n\n @include mq(sm) {\n font-size: $font-size-5 !important;\n }\n}\n\n@mixin fs-5 {\n font-size: $font-size-5 !important;\n\n @include mq(sm) {\n font-size: $font-size-6 !important;\n }\n}\n\n@mixin fs-6 {\n font-size: $font-size-6 !important;\n\n @include mq(sm) {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n}\n\n@mixin fs-7 {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-8 !important;\n }\n}\n\n@mixin fs-8 {\n font-size: $font-size-8 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-9 !important;\n }\n}\n\n@mixin fs-9 {\n font-size: $font-size-9 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-10 !important;\n }\n}\n\n@mixin fs-10 {\n font-size: $font-size-10 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-10-sm !important;\n }\n}\n","// Media query\n\n// Media query mixin\n// Usage:\n// @include mq(md) {\n// ..medium and up styles\n// }\n@mixin mq($name) {\n // Retrieves the value from the key\n $value: map-get($media-queries, $name);\n\n // If the key exists in the map\n @if $value {\n // Prints a media query based on the value\n @media (min-width: $value) {\n @content;\n }\n } @else {\n @warn \"No value could be retrieved from `#{$media-query}`. Please make sure it is defined in `$media-queries` map.\";\n }\n}\n\n// Responsive container\n\n@mixin container {\n padding-right: $gutter-spacing-sm;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-right: $gutter-spacing;\n padding-left: $gutter-spacing;\n }\n}\n","// Typography\n\n// prettier-ignore\n$body-font-family: system-ui, -apple-system, blinkmacsystemfont, \"Segoe UI\",\n roboto, \"Helvetica Neue\", arial, sans-serif, \"Segoe UI Emoji\" !default;\n$mono-font-family: \"SFMono-Regular\", menlo, consolas, monospace !default;\n$root-font-size: 16px !default; // DEPRECATED: previously base font-size for rems\n$body-line-height: 1.4 !default;\n$content-line-height: 1.6 !default;\n$body-heading-line-height: 1.25 !default;\n\n// Font size\n// `-sm` suffix is the size at the small (and above) media query\n\n$font-size-1: 0.5625rem !default;\n$font-size-1-sm: 0.625rem !default;\n$font-size-2: 0.6875rem !default; // h4 - uppercased!, h6 not uppercased, text-small\n$font-size-3: 0.75rem !default; // h5\n$font-size-4: 0.875rem !default;\n$font-size-5: 1rem !default; // h3\n$font-size-6: 1.125rem !default; // h2\n$font-size-7: 1.5rem !default;\n$font-size-8: 2rem !default; // h1\n$font-size-9: 2.25rem !default;\n$font-size-10: 2.625rem !default;\n$font-size-10-sm: 3rem !default;\n\n// Colors\n\n$white: #fff !default;\n$grey-dk-000: #959396 !default;\n$grey-dk-100: #5c5962 !default;\n$grey-dk-200: #44434d !default;\n$grey-dk-250: #302d36 !default;\n$grey-dk-300: #27262b !default;\n$grey-lt-000: #f5f6fa !default;\n$grey-lt-100: #eeebee !default;\n$grey-lt-200: #ecebed !default;\n$grey-lt-300: #e6e1e8 !default;\n$purple-000: #7253ed !default;\n$purple-100: #5e41d0 !default;\n$purple-200: #4e26af !default;\n$purple-300: #381885 !default;\n$blue-000: #2c84fa !default;\n$blue-100: #2869e6 !default;\n$blue-200: #264caf !default;\n$blue-300: #183385 !default;\n$green-000: #41d693 !default;\n$green-100: #11b584 !default;\n$green-200: #009c7b !default;\n$green-300: #026e57 !default;\n$yellow-000: #ffeb82 !default;\n$yellow-100: #fadf50 !default;\n$yellow-200: #f7d12e !default;\n$yellow-300: #e7af06 !default;\n$red-000: #f77e7e !default;\n$red-100: #f96e65 !default;\n$red-200: #e94c4c !default;\n$red-300: #dd2e2e !default;\n\n// Spacing\n\n$spacing-unit: 1rem; // 1rem == 16px\n\n$spacers: (\n sp-0: 0,\n sp-1: $spacing-unit * 0.25,\n sp-2: $spacing-unit * 0.5,\n sp-3: $spacing-unit * 0.75,\n sp-4: $spacing-unit,\n sp-5: $spacing-unit * 1.5,\n sp-6: $spacing-unit * 2,\n sp-7: $spacing-unit * 2.5,\n sp-8: $spacing-unit * 3,\n sp-9: $spacing-unit * 3.5,\n sp-10: $spacing-unit * 4,\n) !default;\n$sp-1: map-get($spacers, sp-1) !default; // 0.25 rem == 4px\n$sp-2: map-get($spacers, sp-2) !default; // 0.5 rem == 8px\n$sp-3: map-get($spacers, sp-3) !default; // 0.75 rem == 12px\n$sp-4: map-get($spacers, sp-4) !default; // 1 rem == 16px\n$sp-5: map-get($spacers, sp-5) !default; // 1.5 rem == 24px\n$sp-6: map-get($spacers, sp-6) !default; // 2 rem == 32px\n$sp-7: map-get($spacers, sp-7) !default; // 2.5 rem == 40px\n$sp-8: map-get($spacers, sp-8) !default; // 3 rem == 48px\n$sp-9: map-get($spacers, sp-9) !default; // 3.5 rem == 56px\n$sp-10: map-get($spacers, sp-10) !default; // 4 rem == 64px\n\n// Borders\n\n$border: 1px solid !default;\n$border-radius: 4px !default;\n$border-color: $grey-lt-100 !default;\n\n// Grid system\n\n$gutter-spacing: $sp-6 !default;\n$gutter-spacing-sm: $sp-4 !default;\n$nav-width: 16.5rem !default;\n$nav-width-md: 15.5rem !default;\n$nav-list-item-height: $sp-6 !default;\n$nav-list-item-height-sm: $sp-8 !default;\n$nav-list-expander-right: true;\n$content-width: 50rem !default;\n$header-height: 3.75rem !default;\n$search-results-width: $content-width - $nav-width !default;\n$transition-duration: 400ms;\n\n// Media queries in pixels\n\n$media-queries: (\n xs: 20rem,\n sm: 31.25rem,\n md: $content-width,\n lg: $content-width + $nav-width,\n xl: 87.5rem,\n) !default;\n","$iueblue-000: #005077;\n$iueblue-100: #005077;\n$iueblue-200: #005077;\n$iueblue-300: #005077;","// The basic two column layout\n\n.side-bar {\n z-index: 0;\n display: flex;\n flex-wrap: wrap;\n background-color: $sidebar-color;\n\n @include mq(md) {\n flex-flow: column nowrap;\n position: fixed;\n width: $nav-width-md;\n height: 100%;\n border-right: $border $border-color;\n align-items: flex-end;\n }\n\n @include mq(lg) {\n width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});\n min-width: $nav-width;\n }\n}\n\n.main {\n @include mq(md) {\n position: relative;\n max-width: $content-width;\n margin-left: $nav-width-md;\n }\n\n @include mq(lg) {\n // stylelint-disable function-name-case\n // disable for Max(), we want to use the CSS max() function\n margin-left: Max(\n #{$nav-width},\n calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width})\n );\n // stylelint-enable function-name-case\n }\n}\n\n.main-content-wrap {\n @include container;\n\n padding-top: $gutter-spacing-sm;\n padding-bottom: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-top: $gutter-spacing;\n padding-bottom: $gutter-spacing;\n }\n}\n\n.main-header {\n z-index: 0;\n display: none;\n background-color: $sidebar-color;\n\n @include mq(md) {\n display: flex;\n justify-content: space-between;\n height: $header-height;\n background-color: $body-background-color;\n border-bottom: $border $border-color;\n }\n\n &.nav-open {\n display: block;\n\n @include mq(md) {\n display: flex;\n }\n }\n}\n\n.site-nav,\n.site-header,\n.site-footer {\n width: 100%;\n\n @include mq(lg) {\n width: $nav-width;\n }\n}\n\n.site-nav {\n display: none;\n\n &.nav-open {\n display: block;\n }\n\n @include mq(md) {\n display: block;\n padding-top: $sp-8;\n padding-bottom: $gutter-spacing-sm;\n overflow-y: auto;\n flex: 1 1 auto;\n }\n}\n\n.site-header {\n display: flex;\n min-height: $header-height;\n align-items: center;\n\n @include mq(md) {\n height: $header-height;\n max-height: $header-height;\n border-bottom: $border $border-color;\n }\n}\n\n.site-title {\n @include container;\n\n flex-grow: 1;\n display: flex;\n height: 100%;\n align-items: center;\n padding-top: $sp-3;\n padding-bottom: $sp-3;\n color: $body-heading-color;\n @include fs-6;\n\n @include mq(md) {\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n }\n}\n\n@if variable-exists(logo) {\n .site-logo {\n width: 100%;\n height: 100%;\n background-image: url($logo);\n background-repeat: no-repeat;\n background-position: left center;\n background-size: contain;\n }\n}\n\n.site-button {\n display: flex;\n height: 100%;\n padding: $gutter-spacing-sm;\n align-items: center;\n}\n\n@include mq(md) {\n .site-header .site-button {\n display: none;\n }\n}\n\n.site-title:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n}\n\n.site-button:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n}\n\n// stylelint-disable selector-max-type\n\nbody {\n position: relative;\n padding-bottom: $sp-10;\n overflow-y: scroll;\n\n @include mq(md) {\n position: static;\n padding-bottom: 0;\n }\n}\n\n// stylelint-enable selector-max-type\n\n.site-footer {\n @include container;\n\n position: absolute;\n bottom: 0;\n left: 0;\n padding-top: $sp-4;\n padding-bottom: $sp-4;\n color: $grey-dk-000;\n @include fs-2;\n\n @include mq(md) {\n position: static;\n justify-self: end;\n }\n}\n\n.icon {\n width: $sp-5;\n height: $sp-5;\n color: $link-color;\n}\n","@charset \"UTF-8\";\n\n// Styles for rendered markdown in the .main-content container\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity, selector-max-id\n\n.main-content {\n line-height: $content-line-height;\n\n ol,\n ul,\n dl,\n pre,\n address,\n blockquote,\n .table-wrapper {\n margin-top: 0.5em;\n }\n\n a {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n ul,\n ol {\n padding-left: 1.5em;\n }\n\n li {\n .highlight {\n margin-top: $sp-1;\n }\n }\n\n ol {\n list-style-type: none;\n counter-reset: step-counter;\n\n > li {\n position: relative;\n\n &::before {\n position: absolute;\n top: 0.2em;\n left: -1.6em;\n color: $grey-dk-000;\n content: counter(step-counter);\n counter-increment: step-counter;\n @include fs-3;\n\n @include mq(sm) {\n top: 0.11em;\n }\n }\n\n ol {\n counter-reset: sub-counter;\n\n > li {\n &::before {\n content: counter(sub-counter, lower-alpha);\n counter-increment: sub-counter;\n }\n }\n }\n }\n }\n\n ul {\n list-style: none;\n\n > li {\n &::before {\n position: absolute;\n margin-left: -1.4em;\n color: $grey-dk-000;\n content: \"•\";\n }\n }\n }\n\n .task-list-item {\n &::before {\n content: \"\";\n }\n }\n\n .task-list-item-checkbox {\n margin-right: 0.6em;\n margin-left: -1.4em;\n\n // The same margin-left is used above for ul > li::before\n }\n\n hr + * {\n margin-top: 0;\n }\n\n h1:first-of-type {\n margin-top: 0.5em;\n }\n\n dl {\n display: grid;\n grid-template: auto / 10em 1fr;\n }\n\n dt,\n dd {\n margin: 0.25em 0;\n }\n\n dt {\n grid-column: 1;\n font-weight: 500;\n text-align: right;\n\n &::after {\n content: \":\";\n }\n }\n\n dd {\n grid-column: 2;\n margin-bottom: 0;\n margin-left: 1em;\n\n blockquote,\n div,\n dl,\n dt,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n li,\n ol,\n p,\n pre,\n table,\n ul,\n .table-wrapper {\n &:first-child {\n margin-top: 0;\n }\n }\n }\n\n dd,\n ol,\n ul {\n dl:first-child {\n dt:first-child,\n dd:nth-child(2) {\n margin-top: 0;\n }\n }\n }\n\n .anchor-heading {\n position: absolute;\n right: -$sp-4;\n width: $sp-5;\n height: 100%;\n padding-right: $sp-1;\n padding-left: $sp-1;\n overflow: visible;\n\n @include mq(md) {\n right: auto;\n left: -$sp-5;\n }\n\n svg {\n display: inline-block;\n width: 100%;\n height: 100%;\n color: $link-color;\n visibility: hidden;\n }\n }\n\n .anchor-heading:hover,\n .anchor-heading:focus,\n h1:hover > .anchor-heading,\n h2:hover > .anchor-heading,\n h3:hover > .anchor-heading,\n h4:hover > .anchor-heading,\n h5:hover > .anchor-heading,\n h6:hover > .anchor-heading {\n svg {\n visibility: visible;\n }\n }\n\n summary {\n cursor: pointer;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n #toctitle {\n position: relative;\n margin-top: 1.5em;\n margin-bottom: 0.25em;\n\n + table,\n + .table-wrapper,\n + .code-example,\n + .highlighter-rouge,\n + .sectionbody .listingblock {\n margin-top: 1em;\n }\n\n + p:not(.label) {\n margin-top: 0;\n }\n }\n\n > h1:first-child,\n > h2:first-child,\n > h3:first-child,\n > h4:first-child,\n > h5:first-child,\n > h6:first-child,\n > .sect1:first-child > h2,\n > .sect2:first-child > h3,\n > .sect3:first-child > h4,\n > .sect4:first-child > h5,\n > .sect5:first-child > h6 {\n margin-top: $sp-2;\n }\n}\n","// Main nav, breadcrumb, etc...\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity\n\n.nav-list {\n padding: 0;\n margin-top: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-list-item {\n @include fs-4;\n\n position: relative;\n margin: 0;\n\n @include mq(md) {\n @include fs-3;\n }\n\n .nav-list-link {\n display: block;\n min-height: $nav-list-item-height-sm;\n padding-top: $sp-1;\n padding-bottom: $sp-1;\n line-height: #{$nav-list-item-height-sm - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height-sm;\n padding-left: $gutter-spacing-sm;\n } @else {\n padding-right: $gutter-spacing-sm;\n padding-left: $nav-list-item-height-sm;\n }\n\n @include mq(md) {\n min-height: $nav-list-item-height;\n line-height: #{$nav-list-item-height - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height;\n padding-left: $gutter-spacing;\n } @else {\n padding-right: $gutter-spacing;\n padding-left: $nav-list-item-height;\n }\n }\n\n &.external > svg {\n width: $sp-4;\n height: $sp-4;\n vertical-align: text-bottom;\n }\n\n &.active {\n font-weight: 600;\n text-decoration: none;\n }\n\n &:hover,\n &.active {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n }\n }\n\n .nav-list-expander {\n position: absolute;\n @if $nav-list-expander-right {\n right: 0;\n }\n\n width: $nav-list-item-height-sm;\n height: $nav-list-item-height-sm;\n padding: #{$nav-list-item-height-sm * 0.25};\n color: $link-color;\n\n @include mq(md) {\n width: $nav-list-item-height;\n height: $nav-list-item-height;\n padding: #{$nav-list-item-height * 0.25};\n }\n\n &:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n }\n\n @if $nav-list-expander-right {\n svg {\n transform: rotate(90deg);\n }\n }\n }\n\n > .nav-list {\n display: none;\n padding-left: $sp-3;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n\n .nav-list-link {\n color: $nav-child-link-color;\n }\n\n .nav-list-expander {\n color: $nav-child-link-color;\n }\n }\n }\n\n &.active {\n > .nav-list-expander svg {\n @if $nav-list-expander-right {\n transform: rotate(-90deg);\n } @else {\n transform: rotate(90deg);\n }\n }\n\n > .nav-list {\n display: block;\n }\n }\n }\n}\n\n.nav-category {\n padding: $sp-2 $gutter-spacing-sm;\n font-weight: 600;\n text-align: start;\n text-transform: uppercase;\n border-bottom: $border $border-color;\n @include fs-2;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing;\n margin-top: $gutter-spacing-sm;\n text-align: start;\n\n &:first-child {\n margin-top: 0;\n }\n }\n}\n\n.nav-list.nav-category-list {\n > .nav-list-item {\n margin: 0;\n\n > .nav-list {\n padding: 0;\n\n > .nav-list-item {\n > .nav-list-link {\n color: $link-color;\n }\n\n > .nav-list-expander {\n color: $link-color;\n }\n }\n }\n }\n}\n\n// Aux nav\n\n.aux-nav {\n height: 100%;\n overflow-x: auto;\n @include fs-2;\n\n .aux-nav-list {\n display: flex;\n height: 100%;\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n .aux-nav-list-item {\n display: inline-block;\n height: 100%;\n padding: 0;\n margin: 0;\n }\n\n @include mq(md) {\n padding-right: $gutter-spacing-sm;\n }\n}\n\n// Breadcrumb nav\n\n.breadcrumb-nav {\n @include mq(md) {\n margin-top: -$sp-4;\n }\n}\n\n.breadcrumb-nav-list {\n padding-left: 0;\n margin-bottom: $sp-3;\n list-style: none;\n}\n\n.breadcrumb-nav-list-item {\n display: table-cell;\n @include fs-2;\n\n &::before {\n display: none;\n }\n\n &::after {\n display: inline-block;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $grey-dk-000;\n content: \"/\";\n }\n\n &:last-child {\n &::after {\n content: \"\";\n }\n }\n}\n","// Typography\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\nh1,\n.text-alpha {\n @include fs-8;\n\n font-weight: 300;\n}\n\nh2,\n.text-beta,\n#toctitle {\n @include fs-6;\n}\n\nh3,\n.text-gamma {\n @include fs-5;\n}\n\nh4,\n.text-delta {\n @include fs-2;\n\n font-weight: 400;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n}\n\nh4 code {\n text-transform: none;\n}\n\nh5,\n.text-epsilon {\n @include fs-3;\n}\n\nh6,\n.text-zeta {\n @include fs-2;\n}\n\n.text-small {\n @include fs-2;\n}\n\n.text-mono {\n font-family: $mono-font-family !important;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n","// Labels (not the form kind)\n\n// this :not() prevents a style clash with Mermaid.js's\n// diagram labels, which also use .label\n// for more, see https://github.com/just-the-docs/just-the-docs/issues/1272\n// and the accompanying PR\n.label:not(g),\n.label-blue:not(g) {\n display: inline-block;\n padding: 0.16em 0.56em;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $white;\n text-transform: uppercase;\n vertical-align: middle;\n background-color: $blue-100;\n @include fs-2;\n\n border-radius: 12px;\n}\n\n.label-green:not(g) {\n background-color: $green-200;\n}\n\n.label-purple:not(g) {\n background-color: $purple-100;\n}\n\n.label-red:not(g) {\n background-color: $red-200;\n}\n\n.label-yellow:not(g) {\n color: $grey-dk-200;\n background-color: $yellow-200;\n}\n","// Buttons and things that look like buttons\n// stylelint-disable color-named\n\n.btn {\n display: inline-block;\n box-sizing: border-box;\n padding: 0.3em 1em;\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n line-height: 1.5;\n color: $link-color;\n text-decoration: none;\n vertical-align: baseline;\n cursor: pointer;\n background-color: $base-button-color;\n border-width: 0;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n appearance: none;\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: darken($link-color, 2%);\n }\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n text-decoration: none;\n background-color: darken($base-button-color, 1%);\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($base-button-color, 3%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken(#dcdcdc, 5%);\n }\n\n &:disabled,\n &.disabled {\n &,\n &:hover {\n color: rgba(102, 102, 102, 0.5);\n cursor: default;\n background-color: rgba(229, 229, 229, 0.5);\n background-image: none;\n box-shadow: none;\n }\n }\n}\n\n.btn-outline {\n color: $link-color;\n background: transparent;\n box-shadow: inset 0 0 0 2px $grey-lt-300;\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n color: darken($link-color, 4%);\n text-decoration: none;\n background-color: transparent;\n box-shadow: inset 0 0 0 3px $grey-lt-300;\n }\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow:\n inset 0 0 0 2px $grey-dk-100,\n 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: inset 0 0 0 2px $grey-dk-100;\n }\n}\n\n.btn-primary {\n @include btn-color($white, $btn-primary-color);\n}\n\n.btn-purple {\n @include btn-color($white, $purple-100);\n}\n\n.btn-blue {\n @include btn-color($white, $blue-000);\n}\n\n.btn-green {\n @include btn-color($white, $green-100);\n}\n\n.btn-reset {\n background: none;\n border: none;\n margin: 0;\n text-align: inherit;\n font: inherit;\n border-radius: 0;\n appearance: none;\n}\n","// Colored button\n\n@mixin btn-color($fg, $bg) {\n color: $fg;\n background-color: darken($bg, 2%);\n background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%));\n box-shadow:\n 0 1px 3px rgba(0, 0, 0, 0.25),\n 0 4px 10px rgba(0, 0, 0, 0.12);\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: $fg;\n background-color: darken($bg, 4%);\n background-image: linear-gradient((lighten($bg, 2%), darken($bg, 4%)));\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($bg, 5%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken($bg, 10%);\n }\n}\n","// Search input and autocomplete\n\n.search {\n position: relative;\n z-index: 2;\n flex-grow: 1;\n height: $sp-10;\n padding: $sp-2;\n transition: padding linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: relative !important;\n width: auto !important;\n height: 100% !important;\n padding: 0;\n transition: none;\n }\n}\n\n.search-input-wrap {\n position: relative;\n z-index: 1;\n height: $sp-8;\n overflow: hidden;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n transition: height linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: absolute;\n width: 100%;\n max-width: $search-results-width;\n height: 100% !important;\n border-radius: 0;\n box-shadow: none;\n transition: width ease $transition-duration;\n }\n}\n\n.search-input {\n position: absolute;\n width: 100%;\n height: 100%;\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing-sm + $sp-5};\n font-size: 1rem;\n color: $body-text-color;\n background-color: $search-background-color;\n border-top: 0;\n border-right: 0;\n border-bottom: 0;\n border-left: 0;\n border-radius: 0;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing + $sp-5};\n font-size: 0.875rem;\n background-color: $body-background-color;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n &:focus {\n outline: 0;\n\n + .search-label .search-icon {\n color: $link-color;\n }\n }\n}\n\n.search-label {\n position: absolute;\n display: flex;\n height: 100%;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-left: $gutter-spacing;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n .search-icon {\n width: #{$sp-4 * 1.2};\n height: #{$sp-4 * 1.2};\n align-self: center;\n color: $grey-dk-000;\n }\n}\n\n.search-results {\n position: absolute;\n left: 0;\n display: none;\n width: 100%;\n max-height: calc(100% - #{$sp-10});\n overflow-y: auto;\n background-color: $search-background-color;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n\n @include mq(md) {\n top: 100%;\n width: $search-results-width;\n max-height: calc(100vh - 200%) !important;\n }\n}\n\n.search-results-list {\n padding-left: 0;\n margin-bottom: $sp-1;\n list-style: none;\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n}\n\n.search-results-list-item {\n padding: 0;\n margin: 0;\n}\n\n.search-result {\n display: block;\n padding: $sp-1 $sp-3;\n\n &:hover,\n &.active {\n background-color: $feedback-color;\n }\n}\n\n.search-result-title {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 40%;\n padding-right: $sp-2;\n vertical-align: top;\n }\n}\n\n.search-result-doc {\n display: flex;\n align-items: center;\n word-wrap: break-word;\n\n &.search-result-doc-parent {\n opacity: 0.5;\n @include fs-3;\n\n @include mq(md) {\n @include fs-2;\n }\n }\n\n .search-result-icon {\n width: $sp-4;\n height: $sp-4;\n margin-right: $sp-2;\n color: $link-color;\n flex-shrink: 0;\n }\n\n .search-result-doc-title {\n overflow: auto;\n }\n}\n\n.search-result-section {\n margin-left: #{$sp-4 + $sp-2};\n word-wrap: break-word;\n}\n\n.search-result-rel-url {\n display: block;\n margin-left: #{$sp-4 + $sp-2};\n overflow: hidden;\n color: $search-result-preview-color;\n text-overflow: ellipsis;\n white-space: nowrap;\n @include fs-1;\n}\n\n.search-result-previews {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n padding-left: $sp-4;\n margin-left: $sp-2;\n color: $search-result-preview-color;\n word-wrap: break-word;\n border-left: $border;\n border-left-color: $border-color;\n @include fs-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 60%;\n padding-left: $sp-2;\n margin-left: 0;\n vertical-align: top;\n }\n}\n\n.search-result-preview + .search-result-preview {\n margin-top: $sp-1;\n}\n\n.search-result-highlight {\n font-weight: bold;\n}\n\n.search-no-result {\n padding: $sp-2 $sp-3;\n @include fs-3;\n}\n\n.search-button {\n position: fixed;\n right: $sp-4;\n bottom: $sp-4;\n display: flex;\n width: $sp-9;\n height: $sp-9;\n background-color: $search-background-color;\n border: 1px solid rgba($link-color, 0.3);\n border-radius: #{$sp-9 * 0.5};\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n align-items: center;\n justify-content: center;\n}\n\n.search-overlay {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1;\n width: 0;\n height: 0;\n background-color: rgba(0, 0, 0, 0.3);\n opacity: 0;\n transition:\n opacity ease $transition-duration,\n width 0s $transition-duration,\n height 0s $transition-duration;\n}\n\n.search-active {\n .search {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .search-input-wrap {\n height: $sp-10;\n border-radius: 0;\n\n @include mq(md) {\n width: $search-results-width;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n }\n }\n\n .search-input {\n background-color: $search-background-color;\n\n @include mq(md) {\n padding-left: 2.3rem;\n }\n }\n\n .search-label {\n @include mq(md) {\n padding-left: 0.6rem;\n }\n }\n\n .search-results {\n display: block;\n }\n\n .search-overlay {\n width: 100%;\n height: 100%;\n opacity: 1;\n transition:\n opacity ease $transition-duration,\n width 0s,\n height 0s;\n }\n\n @include mq(md) {\n .main {\n position: fixed;\n right: 0;\n left: 0;\n }\n }\n\n .main-header {\n padding-top: $sp-10;\n\n @include mq(md) {\n padding-top: 0;\n }\n }\n}\n","// Tables\n// stylelint-disable max-nesting-depth, selector-no-type, selector-max-type\n\n.table-wrapper {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: $sp-5;\n overflow-x: auto;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n}\n\ntable {\n display: table;\n min-width: 100%;\n border-collapse: separate;\n}\n\nth,\ntd {\n @include fs-3;\n\n min-width: 7.5rem;\n padding: $sp-2 $sp-3;\n background-color: $table-background-color;\n border-bottom: $border rgba($border-color, 0.5);\n border-left: $border $border-color;\n\n &:first-of-type {\n border-left: 0;\n }\n}\n\ntbody {\n tr {\n &:last-of-type {\n th,\n td {\n border-bottom: 0;\n }\n\n td {\n padding-bottom: $sp-3;\n }\n }\n }\n}\n\nthead {\n th {\n border-bottom: $border $border-color;\n }\n}\n","// Code and syntax highlighting\n// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type, scss/comment-no-empty\n\n// {% raw %}\n\n// This instruction applies to all queues not within 'pre' or 'figure', avoiding 'code' generated by the highlight.\n:not(pre, figure) {\n & > code {\n padding: 0.2em 0.15em;\n font-weight: 400;\n background-color: $code-background-color;\n border: $border $border-color;\n border-radius: $border-radius;\n }\n}\n\n// Avoid appearance of dark border around visited code links in Safari\na:visited code {\n border-color: $border-color;\n}\n\n// Content structure for highlighted code blocks using fences or Liquid\n//\n// ```[LANG]...```, no kramdown line_numbers:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n//\n// ```[LANG]...```, kramdown line_numbers = true:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.rouge-gutter.gl > pre.lineno\n// | td.rouge-code > pre\n//\n// {% highlight LANG %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n//\n// {% highlight LANG linenos %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.gutter.gl > pre.lineno\n// | td.code > pre\n//\n// ----...---- (AsciiDoc)\n// div.listingblock > div.content > pre.rouge.highlight\n//\n// fix_linenos removes the outermost pre when it encloses table.rouge-table\n//\n// See docs/index-test.md for some tests.\n//\n// No kramdown line_numbers: fences and Liquid highlighting look the same.\n// Kramdown line_numbers = true: fences have a wider gutter than with Liquid?\n\n// ```[LANG]...```\n// or in AsciiDoc:\n//\n// ----\n// ...\n// ----\n\n// the code may appear with 3 different types:\n// container \\ case: default case, code with line number, code with html rendering\n// top level: div.highlighter-rouge, figure.highlight, figure.highlight\n// second level: div.highlight, div.table-wrapper, pre.highlight\n// third level: pre.highlight, td.code, absent\n// last level: code, pre, code (optionality)\n// highlighter level: span, span, span\n// the spacing are only in the second level for case 1, 3 and in the third level for case 2\n// in AsciiDoc, there is a parent container that contains optionally a title and the content.\n\n// select top level container\ndiv.highlighter-rouge,\ndiv.listingblock > div.content,\nfigure.highlight {\n margin-top: 0;\n margin-bottom: $sp-3;\n background-color: $code-background-color;\n border-radius: $border-radius;\n box-shadow: none;\n -webkit-overflow-scrolling: touch;\n position: relative;\n padding: 0;\n\n // copy button (or other button)\n // the button appear only when there is a hover on the code or focus on button\n > button {\n width: $sp-3;\n opacity: 0;\n position: absolute;\n top: 0;\n right: 0;\n border: $sp-3 solid $code-background-color;\n background-color: $code-background-color;\n color: $body-text-color;\n box-sizing: content-box;\n\n svg {\n fill: $body-text-color;\n }\n\n &:active {\n text-decoration: none;\n outline: none;\n opacity: 1;\n }\n\n &:focus {\n opacity: 1;\n }\n }\n\n // the button can be seen by doing a simple hover in the code, there is no need to go over the location of the button\n &:hover {\n > button {\n cursor: copy;\n opacity: 1;\n }\n }\n}\n\n// setting the spacing and scrollbar on the second level for the first case\n// remove all space on the second and third level\n// this is a mixin to accommodate for the slightly different structures generated via Markdown vs AsciiDoc\n@mixin scroll-and-spacing($code-div, $pre-select) {\n #{$code-div} {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 0;\n }\n\n #{$pre-select},\n code {\n padding: 0;\n margin: 0;\n border: 0;\n }\n}\n\n// for Markdown\ndiv.highlighter-rouge {\n @include scroll-and-spacing(\"div.highlight\", \"pre.highlight\");\n}\n\n// for AsciiDoc. we also need to fix the margins for its parent container.\ndiv.listingblock {\n @include scroll-and-spacing(\"div.content\", \"div.content > pre\");\n\n margin-top: 0;\n margin-bottom: $sp-3;\n}\n\n// {% highlight LANG %}...{% endhighlight %},\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the second level for the thirt case\n// the css rule are apply only to the last code enviroment\n// setting the scroolbar\nfigure.highlight {\n pre,\n :not(pre) > code {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 0;\n }\n}\n\n// ```[LANG]...```, kramdown line_numbers = true,\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the thirt level for the second case\n.highlight .table-wrapper {\n padding: $sp-3 0;\n margin: 0;\n border: 0;\n box-shadow: none;\n\n td,\n pre {\n @include fs-2;\n\n min-width: 0;\n padding: 0;\n background-color: $code-background-color;\n border: 0;\n }\n\n td.gl {\n width: 1em;\n padding-right: $sp-3;\n padding-left: $sp-3;\n }\n\n pre {\n margin: 0;\n line-height: 2;\n }\n}\n\n// Code examples: html render of a code\n.code-example,\n.listingblock > .title {\n padding: $sp-3;\n margin-bottom: $sp-3;\n overflow: auto;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n\n + .highlighter-rouge,\n + .sectionbody .listingblock,\n + .content,\n + figure.highlight {\n position: relative;\n margin-top: -$sp-4;\n border-right: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n border-left: 1px solid $border-color;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n\n// Mermaid diagram code blocks should be left unstyled.\ncode.language-mermaid {\n padding: 0;\n background-color: inherit;\n border: 0;\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight,\npre.highlight {\n background: $code-background-color; // Code Background\n // For Backwards Compatibility Before $code-linenumber-color was added\n @if variable-exists(code-linenumber-color) {\n color: $code-linenumber-color; // Code Line Numbers\n } @else {\n color: $body-text-color; // Code Line Numbers\n }\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight pre {\n background: $code-background-color; // Code Background\n}\n\n// {% endraw %}\n","// Utility classes for colors\n\n// Text colors\n\n.text-grey-dk-000 {\n color: $grey-dk-000 !important;\n}\n\n.text-grey-dk-100 {\n color: $grey-dk-100 !important;\n}\n\n.text-grey-dk-200 {\n color: $grey-dk-200 !important;\n}\n\n.text-grey-dk-250 {\n color: $grey-dk-250 !important;\n}\n\n.text-grey-dk-300 {\n color: $grey-dk-300 !important;\n}\n\n.text-grey-lt-000 {\n color: $grey-lt-000 !important;\n}\n\n.text-grey-lt-100 {\n color: $grey-lt-100 !important;\n}\n\n.text-grey-lt-200 {\n color: $grey-lt-200 !important;\n}\n\n.text-grey-lt-300 {\n color: $grey-lt-300 !important;\n}\n\n.text-blue-000 {\n color: $blue-000 !important;\n}\n\n.text-blue-100 {\n color: $blue-100 !important;\n}\n\n.text-blue-200 {\n color: $blue-200 !important;\n}\n\n.text-blue-300 {\n color: $blue-300 !important;\n}\n\n.text-green-000 {\n color: $green-000 !important;\n}\n\n.text-green-100 {\n color: $green-100 !important;\n}\n\n.text-green-200 {\n color: $green-200 !important;\n}\n\n.text-green-300 {\n color: $green-300 !important;\n}\n\n.text-purple-000 {\n color: $purple-000 !important;\n}\n\n.text-purple-100 {\n color: $purple-100 !important;\n}\n\n.text-purple-200 {\n color: $purple-200 !important;\n}\n\n.text-purple-300 {\n color: $purple-300 !important;\n}\n\n.text-yellow-000 {\n color: $yellow-000 !important;\n}\n\n.text-yellow-100 {\n color: $yellow-100 !important;\n}\n\n.text-yellow-200 {\n color: $yellow-200 !important;\n}\n\n.text-yellow-300 {\n color: $yellow-300 !important;\n}\n\n.text-red-000 {\n color: $red-000 !important;\n}\n\n.text-red-100 {\n color: $red-100 !important;\n}\n\n.text-red-200 {\n color: $red-200 !important;\n}\n\n.text-red-300 {\n color: $red-300 !important;\n}\n\n// Background colors\n\n.bg-grey-dk-000 {\n background-color: $grey-dk-000 !important;\n}\n\n.bg-grey-dk-100 {\n background-color: $grey-dk-100 !important;\n}\n\n.bg-grey-dk-200 {\n background-color: $grey-dk-200 !important;\n}\n\n.bg-grey-dk-250 {\n background-color: $grey-dk-250 !important;\n}\n\n.bg-grey-dk-300 {\n background-color: $grey-dk-300 !important;\n}\n\n.bg-grey-lt-000 {\n background-color: $grey-lt-000 !important;\n}\n\n.bg-grey-lt-100 {\n background-color: $grey-lt-100 !important;\n}\n\n.bg-grey-lt-200 {\n background-color: $grey-lt-200 !important;\n}\n\n.bg-grey-lt-300 {\n background-color: $grey-lt-300 !important;\n}\n\n.bg-blue-000 {\n background-color: $blue-000 !important;\n}\n\n.bg-blue-100 {\n background-color: $blue-100 !important;\n}\n\n.bg-blue-200 {\n background-color: $blue-200 !important;\n}\n\n.bg-blue-300 {\n background-color: $blue-300 !important;\n}\n\n.bg-green-000 {\n background-color: $green-000 !important;\n}\n\n.bg-green-100 {\n background-color: $green-100 !important;\n}\n\n.bg-green-200 {\n background-color: $green-200 !important;\n}\n\n.bg-green-300 {\n background-color: $green-300 !important;\n}\n\n.bg-purple-000 {\n background-color: $purple-000 !important;\n}\n\n.bg-purple-100 {\n background-color: $purple-100 !important;\n}\n\n.bg-purple-200 {\n background-color: $purple-200 !important;\n}\n\n.bg-purple-300 {\n background-color: $purple-300 !important;\n}\n\n.bg-yellow-000 {\n background-color: $yellow-000 !important;\n}\n\n.bg-yellow-100 {\n background-color: $yellow-100 !important;\n}\n\n.bg-yellow-200 {\n background-color: $yellow-200 !important;\n}\n\n.bg-yellow-300 {\n background-color: $yellow-300 !important;\n}\n\n.bg-red-000 {\n background-color: $red-000 !important;\n}\n\n.bg-red-100 {\n background-color: $red-100 !important;\n}\n\n.bg-red-200 {\n background-color: $red-200 !important;\n}\n\n.bg-red-300 {\n background-color: $red-300 !important;\n}\n","// Utility classes for layout\n\n// Display\n\n.d-block {\n display: block !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .d-sm-block, .d-md-none, .d-lg-inline\n .d-#{$media-query}-block {\n display: block !important;\n }\n .d-#{$media-query}-flex {\n display: flex !important;\n }\n .d-#{$media-query}-inline {\n display: inline !important;\n }\n .d-#{$media-query}-inline-block {\n display: inline-block !important;\n }\n .d-#{$media-query}-none {\n display: none !important;\n }\n }\n }\n}\n\n// Horizontal alignment\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.flex-justify-start {\n justify-content: flex-start !important;\n}\n\n.flex-justify-end {\n justify-content: flex-end !important;\n}\n\n.flex-justify-between {\n justify-content: space-between !important;\n}\n\n.flex-justify-around {\n justify-content: space-around !important;\n}\n\n// Vertical alignment\n\n.v-align-baseline {\n vertical-align: baseline !important;\n}\n\n.v-align-bottom {\n vertical-align: bottom !important;\n}\n\n.v-align-middle {\n vertical-align: middle !important;\n}\n\n.v-align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.v-align-text-top {\n vertical-align: text-top !important;\n}\n\n.v-align-top {\n vertical-align: top !important;\n}\n","// Utility classes for typography\n\n.fs-1 {\n @include fs-1;\n}\n\n.fs-2 {\n @include fs-2;\n}\n\n.fs-3 {\n @include fs-3;\n}\n\n.fs-4 {\n @include fs-4;\n}\n\n.fs-5 {\n @include fs-5;\n}\n\n.fs-6 {\n @include fs-6;\n}\n\n.fs-7 {\n @include fs-7;\n}\n\n.fs-8 {\n @include fs-8;\n}\n\n.fs-9 {\n @include fs-9;\n}\n\n.fs-10 {\n @include fs-10;\n}\n\n.fw-300 {\n font-weight: 300 !important;\n}\n\n.fw-400 {\n font-weight: 400 !important;\n}\n\n.fw-500 {\n font-weight: 500 !important;\n}\n\n.fw-700 {\n font-weight: 700 !important;\n}\n\n.lh-0 {\n line-height: 0 !important;\n}\n\n.lh-default {\n line-height: $body-line-height;\n}\n\n.lh-tight {\n line-height: $body-heading-line-height;\n}\n\n.ls-5 {\n letter-spacing: 0.05em !important;\n}\n\n.ls-10 {\n letter-spacing: 0.1em !important;\n}\n\n.ls-0 {\n letter-spacing: 0 !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n","// Utility classes for lists\n\n// stylelint-disable selector-max-type\n\n.list-style-none {\n padding: 0 !important;\n margin: 0 !important;\n list-style: none !important;\n\n li {\n &::before {\n display: none !important;\n }\n }\n}\n","// Utility classes for margins and padding\n\n// stylelint-disable block-opening-brace-space-after, block-opening-brace-space-before\n\n// Margin spacer utilities\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-0, .m-1, .m-2...\n .m-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n .mx-#{$scale}-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-sm-0, .m-md-1, .m-lg-2...\n .m-#{$media-query}-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$media-query}-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$media-query}-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$media-query}-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n }\n }\n}\n\n// Padding spacer utilities\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-0, .p-1, .p-2...\n .p-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @include mq($media-query) {\n @for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-sm-0, .p-md-1, .p-lg-2...\n .p-#{$media-query}-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$media-query}-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$media-query}-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n }\n }\n}\n","// stylelint-disable selector-max-specificity, selector-max-id, selector-max-type, selector-no-qualifying-type\n\n@media print {\n .site-footer,\n .site-button,\n #edit-this-page,\n #back-to-top,\n .site-nav,\n .main-header {\n display: none !important;\n }\n\n .side-bar {\n width: 100%;\n height: auto;\n border-right: 0 !important;\n }\n\n .site-header {\n border-bottom: 1px solid $border-color;\n }\n\n .site-title {\n font-size: 1rem !important;\n font-weight: 700 !important;\n }\n\n .text-small {\n font-size: 8pt !important;\n }\n\n pre.highlight {\n border: 1px solid $border-color;\n }\n\n .main {\n max-width: none;\n margin-left: 0;\n }\n}\n","// Skipnav\n// Skip to main content\n\na.skip-to-main {\n left: -999px;\n position: absolute;\n top: auto;\n width: 1px;\n height: 1px;\n overflow: hidden;\n z-index: -999;\n}\n\na.skip-to-main:focus,\na.skip-to-main:active {\n color: $link-color;\n background-color: $body-background-color;\n left: auto;\n top: auto;\n width: 30%;\n height: auto;\n overflow: auto;\n margin: 10px 35%;\n padding: 5px;\n border-radius: 15px;\n border: 4px solid $btn-primary-color;\n text-align: center;\n font-size: 1.2em;\n z-index: 999;\n}\n","\n\n$logo: \"/assets/images/logo.png\";\n\n@import \"./support/support\";\n@import \"./custom/setup\";\n@import \"./color_schemes/light\";\n\n@import \"./color_schemes/iue\";\n\n@import \"./modules\";\ndiv.opaque {\n background-color: $body-background-color;\n}p.warning, blockquote.warning {\n background: rgba($yellow-000, 0.2);\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $yellow-300;\n content: \"Warning\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .warning-title {\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.warning-title, blockquote.warning-title {\n background: rgba($yellow-000, 0.2);\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.warning {\n margin-left: 0;\n margin-right: 0;\n \n > p:first-child {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.warning-title {\n margin-left: 0;\n margin-right: 0;\n \n > p:nth-child(2) {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\np.danger, blockquote.danger {\n background: rgba($red-000, 0.2);\n border-left: $border-radius solid $red-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $red-300;\n content: \"Danger\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .danger-title {\n color: $red-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.danger-title, blockquote.danger-title {\n background: rgba($red-000, 0.2);\n border-left: $border-radius solid $red-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $red-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.danger {\n margin-left: 0;\n margin-right: 0;\n \n > p:first-child {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.danger-title {\n margin-left: 0;\n margin-right: 0;\n \n > p:nth-child(2) {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\np.note, blockquote.note {\n background: rgba($iueblue-000, 0.2);\n border-left: $border-radius solid $iueblue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $iueblue-300;\n content: \"Note\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .note-title {\n color: $iueblue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.note-title, blockquote.note-title {\n background: rgba($iueblue-000, 0.2);\n border-left: $border-radius solid $iueblue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $iueblue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.note {\n margin-left: 0;\n margin-right: 0;\n \n > p:first-child {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.note-title {\n margin-left: 0;\n margin-right: 0;\n \n > p:nth-child(2) {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n@import \"./custom/custom\";\n\n\n"],"file":"just-the-docs-default.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/vendor/OneLightJekyll/syntax.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/vendor/normalize.scss/normalize.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/base.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/color_schemes/light.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/support/mixins/_typography.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/support/mixins/_layout.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/support/_variables.scss","../../_sass/custom/setup.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/layout.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/content.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/navigation.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/typography.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/labels.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/buttons.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/support/mixins/_buttons.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/search.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/tables.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/code.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/utilities/_colors.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/utilities/_layout.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/utilities/_typography.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/utilities/_lists.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/utilities/_spacing.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/print.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/skiptomain.scss","just-the-docs-default.scss"],"names":[],"mappings":"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EACA;;;AAGF;EACE,OK7DY;EL8DZ;;;AAGF;EACE;EACA,uBI/BY;EJgCZ;;AAEA;EACE;;;AAIJ;EACE,aIvEiB;EJwEjB;EACA,aIvEiB;;;AJ0EnB;AAAA;EAEE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA,kBI/DY;EJgEZ;;;AAIF;EACE;EAGA;EACA;EACA;EACA;;;AM7GF;EACE;EACA;EACA;EACA,kBF6BY;;ADrBV;EGZJ;IAOI;IACA;IACA,OFwFW;IEvFX;IACA;IACA;;;AHAA;EGZJ;IAgBI;IACA,WF+EQ;;;;ADpFR;EGSJ;IAEI;IACA,WF6EY;IE5EZ,aFwEW;;;ADrFX;EGSJ;IAUI;;;;AAQJ;EHhBE,eCuDK;EDtDL,cCsDK;EEpCL,aFoCK;EEnCL,gBFmCK;;ADlEH;EG2BJ;IHZI,eCqDG;IDpDH,cCoDG;;;ADpEH;EG2BJ;IAOI,aFkCG;IEjCH,gBFiCG;;;;AE7BP;EACE;EACA;EACA,kBFrBY;;ADrBV;EGuCJ;IAMI;IACA;IACA,QF2CY;IE1CZ,kBFjCI;IEkCJ;;;AAGF;EACE;;AHrDA;EGoDF;IAII;;;;AAKN;AAAA;AAAA;EAGE;;AHhEE;EG6DJ;AAAA;AAAA;IAMI,OFiBQ;;;;AEbZ;EACE;;AAEA;EACE;;AH3EA;EGuEJ;IAQI;IACA,aFVG;IEWH,gBFfG;IEgBH;IACA;;;;AAIJ;EACE;EACA,YFCc;EEAd;;AH1FE;EGuFJ;IAMI,QFHY;IEIZ,YFJY;IEKZ;;;;AAIJ;EHxFE,eCuDK;EDtDL,cCsDK;EEoCL;EACA;EACA;EACA;EACA,aFzCK;EE0CL,gBF1CK;EE2CL,OFxFY;EFOZ;;AC3BE;EGmGJ;IHpFI,eCqDG;IDpDH,cCoDG;;;ADpEH;EGmGJ;IJrEI;IACA,aEpCuB;;;ADKvB;EGmGJ;IAaI,aFhDG;IEiDH,gBFjDG;;;;AEsDL;EACE;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA,SFjEK;EEkEL;;;AHpIE;EGwIF;IACE;;;AAIJ;EACE;;;AAQF;EACE;;;AASF;EACE;EACA,gBF1FM;EE2FN;;AHnKE;EGg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ACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AE3HF;EACE;EACA;EACA;EACA,QTgFM;ES/EN,STuEK;EStEL;;AVME;EUZJ;IASI;IACA;IACA;IACA;IACA;;;;AAIJ;EACE;EACA;EACA,QT8DK;ES7DL;EACA,eTmEc;ESlEd,YACE;EAEF;;AVdE;EUKJ;IAYI;IACA;IACA,WTwEmB;ISvEnB;IACA;IACA;IACA;;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA,OThBY;ESiBZ,kBTnBM;ESoBN;EACA;EACA;EACA;EACA;;AVvCE;EU2BJ;IAeI;IACA;IACA,kBT7BI;IS8BJ;;;AAGF;EACE;;AAEA;EACE,ORlEQ;;;AQuEd;EACE;EACA;EACA;EACA,cTKK;;ADlEH;EUyDJ;IAOI,cTIG;ISHH;;;AAGF;EACE;EACA;EACA;EACA,OTxDU;;;AS4Dd;EACE;EACA;EACA;EACA;EACA;EACA;EACA,kBTpEM;ESqEN,4BTPc;ESQd,2BTRc;ESSd,YACE;;AVvFA;EU4EJ;IAeI;IACA,OTDmB;ISEnB;;;;AAIJ;EACE;EACA,eTpCK;ESqCL;EXzFA;;ACXE;EUiGJ;IXnFI;;;ACdA;EUiGJ;IX9FE;;;ACHE;EUiGJ;IX3FI;;;;AWsGJ;EACE;EACA;;;AAGF;EACE;EACA;;AAEA;EAEE,kBZ3Ha;;;AY+HjB;EACE;EACA,aT7DK;ES8DL,gBT9DK;;ADhEH;EU2HJ;IAMI;IACA;IACA,eTnEG;ISoEH;;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;EX3IF;;ACHE;EU6IF;IXvIE;;;ACNA;EU6IF;IXlJA;;;ACKE;EU6IF;IX/IE;;;AWwJF;EACE,OTrFG;ESsFH,QTtFG;ESuFH,cTzFG;ES0FH,ORxKU;EQyKV;;AAGF;EACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA,OT5JY;ES6JZ;EACA;EX3LA;;ACaE;EUwKJ;IXlLI;;;;AW4LJ;EACE;EACA,aTpHK;ESqHL,gBTrHK;ESsHL,cTpHK;ESqHL,aTvHK;ESwHL,OTxKY;ESyKZ;EACA,aT9GO;ES+GP,mBTrKY;EF3BZ;;ACKE;EUk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;AdPE;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ad9BJ;EciBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAQR;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;ACjGF;EhBDE;;ACaE;EeZJ;IhBEI;;;;AgBEJ;EhBGE;;ACKE;EeRJ;IhBMI;;;;AgBFJ;EhBOE;;ACHE;EeJJ;IhBUI;;;;AgBNJ;EhBWE;;ACXE;EeAJ;IhBcI;;;;AgBVJ;EhBeE;;ACnBE;EeIJ;IhBkBI;;;;AgBdJ;EhBmBE;;AC3BE;EeQJ;IhBsBI;IACA,aEpCuB;;;;AciB3B;EhBwBE;EACA,aE1CyB;;ADKvB;EeYJ;IhB4BI;;;;AgBxBJ;EhB6BE;EACA,aEnDyB;;ADKvB;EegBJ;IhBiCI;;;;AgB7BJ;EhBkCE;EACA,aE5DyB;;ADKvB;EeoBJ;IhBsCI;;;;AgBlCJ;EhBuCE;EACA,aErEyB;;ADKvB;EewBJ;IhB2CI;;;;AgBvCJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE,adxDiB;;;Ac2DnB;EACE,ad1DyB;;;Ac6D3B;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AC/EF;EACE;EACA;EACA;;AAGE;EACE;;;ACLN;EACE;EACA;;;AAQA;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AjBlCA;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjBzEJ;EiB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AAaN;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AjB7GA;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AjB/IJ;EiBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AC3JR;EACE;AAAA;AAAA;AAAA;AAAA;AAAA;IAME;;EAGF;IACE;IACA;IACA;;EAGF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;IACA;;;AClCJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE,OjBfY;EiBgBZ,kBlBaM;EkBZN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACjBF;EACE,kBnBiBM;;;AmBhBP;EACG;EACA;EACA,enB2EY;EmB1EZ;EACA;;AAEA;EACI,OnBiCK;EmBhCL;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OnBuBO;EmBtBP;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,enBgDY;EmB/CZ;EACA;;AACA;EACE;EACA;EACA,OnBKO;EmBJP;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACI;EACA;EACA,enBIY;EmBHZ;EACA;;AAEA;EACI,OnBlCE;EmBmCF;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OnB5CI;EmB6CJ;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,enBvBY;EmBwBZ;EACA;;AACA;EACE;EACA;EACA,OnB9DI;EmB+DJ;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACI;EACA;EACA,enBnEY;EmBoEZ;EACA;;AAEA;EACI,OlBhKM;EkBiKN;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlB1KQ;EkB2KR;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,enB9FY;EmB+FZ;EACA;;AACA;EACE;EACA;EACA,OlB5LQ;EkB6LR;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE","sourcesContent":["// Generated with OneLightJekyll applied to Atom's One Light theme\n\n.highlight,\npre.highlight {\n background: #f9f9f9;\n color: #383942;\n}\n.highlight pre {\n background: #f9f9f9;\n}\n.highlight .hll {\n background: #f9f9f9;\n}\n.highlight .c {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .err {\n color: #fff;\n background-color: #e05151;\n}\n.highlight .k {\n color: #a625a4;\n}\n.highlight .l {\n color: #50a04f;\n}\n.highlight .n {\n color: #383942;\n}\n.highlight .o {\n color: #383942;\n}\n.highlight .p {\n color: #383942;\n}\n.highlight .cm {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .cp {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .c1 {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .cs {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .ge {\n font-style: italic;\n}\n.highlight .gs {\n font-weight: 700;\n}\n.highlight .kc {\n color: #a625a4;\n}\n.highlight .kd {\n color: #a625a4;\n}\n.highlight .kn {\n color: #a625a4;\n}\n.highlight .kp {\n color: #a625a4;\n}\n.highlight .kr {\n color: #a625a4;\n}\n.highlight .kt {\n color: #a625a4;\n}\n.highlight .ld {\n color: #50a04f;\n}\n.highlight .m {\n color: #b66a00;\n}\n.highlight .s {\n color: #50a04f;\n}\n.highlight .na {\n color: #b66a00;\n}\n.highlight .nb {\n color: #ca7601;\n}\n.highlight .nc {\n color: #ca7601;\n}\n.highlight .no {\n color: #ca7601;\n}\n.highlight .nd {\n color: #ca7601;\n}\n.highlight .ni {\n color: #ca7601;\n}\n.highlight .ne {\n color: #ca7601;\n}\n.highlight .nf {\n color: #383942;\n}\n.highlight .nl {\n color: #ca7601;\n}\n.highlight .nn {\n color: #383942;\n}\n.highlight .nx {\n color: #383942;\n}\n.highlight .py {\n color: #ca7601;\n}\n.highlight .nt {\n color: #e35549;\n}\n.highlight .nv {\n color: #ca7601;\n}\n.highlight .ow {\n font-weight: 700;\n}\n.highlight .w {\n color: #f8f8f2;\n}\n.highlight .mf {\n color: #b66a00;\n}\n.highlight .mh {\n color: #b66a00;\n}\n.highlight .mi {\n color: #b66a00;\n}\n.highlight .mo {\n color: #b66a00;\n}\n.highlight .sb {\n color: #50a04f;\n}\n.highlight .sc {\n color: #50a04f;\n}\n.highlight .sd {\n color: #50a04f;\n}\n.highlight .s2 {\n color: #50a04f;\n}\n.highlight .se {\n color: #50a04f;\n}\n.highlight .sh {\n color: #50a04f;\n}\n.highlight .si {\n color: #50a04f;\n}\n.highlight .sx {\n color: #50a04f;\n}\n.highlight .sr {\n color: #0083bb;\n}\n.highlight .s1 {\n color: #50a04f;\n}\n.highlight .ss {\n color: #0083bb;\n}\n.highlight .bp {\n color: #ca7601;\n}\n.highlight .vc {\n color: #ca7601;\n}\n.highlight .vg {\n color: #ca7601;\n}\n.highlight .vi {\n color: #e35549;\n}\n.highlight .il {\n color: #b66a00;\n}\n.highlight .gu {\n color: #75715e;\n}\n.highlight .gd {\n color: #e05151;\n}\n.highlight .gi {\n color: #43d089;\n}\n.highlight .language-json .w + .s2 {\n color: #e35549;\n}\n.highlight .language-json .kc {\n color: #0083bb;\n}\n","/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput {\n /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect {\n /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// Base element style overrides\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\n:root {\n color-scheme: $color-scheme;\n}\n\n* {\n box-sizing: border-box;\n}\n\nhtml {\n @include fs-4;\n\n scroll-behavior: smooth;\n}\n\nbody {\n font-family: $body-font-family;\n font-size: inherit;\n line-height: $body-line-height;\n color: $body-text-color;\n background-color: $body-background-color;\n overflow-wrap: break-word;\n}\n\nol,\nul,\ndl,\npre,\naddress,\nblockquote,\ntable,\ndiv,\nhr,\nform,\nfieldset,\nnoscript .table-wrapper {\n margin-top: 0;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n#toctitle {\n margin-top: 0;\n margin-bottom: 1em;\n font-weight: 500;\n line-height: $body-heading-line-height;\n color: $body-heading-color;\n}\n\np {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n\na {\n color: $link-color;\n text-decoration: none;\n}\n\na:not([class]) {\n text-decoration: underline;\n text-decoration-color: $border-color;\n text-underline-offset: 2px;\n\n &:hover {\n text-decoration-color: rgba($link-color, 0.45);\n }\n}\n\ncode {\n font-family: $mono-font-family;\n font-size: 0.75em;\n line-height: $body-line-height;\n}\n\nfigure,\npre {\n margin: 0;\n}\n\nli {\n margin: 0.25em 0;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\nhr {\n height: 1px;\n padding: 0;\n margin: $sp-6 0;\n background-color: $border-color;\n border: 0;\n}\n\n// adds a GitHub-style sidebar to blockquotes\nblockquote {\n margin: 10px 0;\n\n // resets user-agent stylesheets for blockquotes\n margin-block-start: 0;\n margin-inline-start: 0;\n padding-left: 1rem;\n border-left: 3px solid $border-color;\n}\n","$color-scheme: light !default;\n$body-background-color: $white !default;\n$body-heading-color: $grey-dk-300 !default;\n$body-text-color: $grey-dk-100 !default;\n$link-color: $purple-000 !default;\n$nav-child-link-color: $grey-dk-100 !default;\n$sidebar-color: $grey-lt-000 !default;\n$base-button-color: #f7f7f7 !default;\n$btn-primary-color: $purple-100 !default;\n$code-background-color: $grey-lt-000 !default;\n$feedback-color: darken($sidebar-color, 3%) !default;\n$table-background-color: $white !default;\n$search-background-color: $white !default;\n$search-result-preview-color: $grey-dk-000 !default;\n\n@import \"./vendor/OneLightJekyll/syntax\";\n","@mixin fs-1 {\n font-size: $font-size-1 !important;\n\n @include mq(sm) {\n font-size: $font-size-1-sm !important;\n }\n}\n\n@mixin fs-2 {\n font-size: $font-size-2 !important;\n\n @include mq(sm) {\n font-size: $font-size-3 !important;\n }\n}\n\n@mixin fs-3 {\n font-size: $font-size-3 !important;\n\n @include mq(sm) {\n font-size: $font-size-4 !important;\n }\n}\n\n@mixin fs-4 {\n font-size: $font-size-4 !important;\n\n @include mq(sm) {\n font-size: $font-size-5 !important;\n }\n}\n\n@mixin fs-5 {\n font-size: $font-size-5 !important;\n\n @include mq(sm) {\n font-size: $font-size-6 !important;\n }\n}\n\n@mixin fs-6 {\n font-size: $font-size-6 !important;\n\n @include mq(sm) {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n}\n\n@mixin fs-7 {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-8 !important;\n }\n}\n\n@mixin fs-8 {\n font-size: $font-size-8 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-9 !important;\n }\n}\n\n@mixin fs-9 {\n font-size: $font-size-9 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-10 !important;\n }\n}\n\n@mixin fs-10 {\n font-size: $font-size-10 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-10-sm !important;\n }\n}\n","// Media query\n\n// Media query mixin\n// Usage:\n// @include mq(md) {\n// ..medium and up styles\n// }\n@mixin mq($name) {\n // Retrieves the value from the key\n $value: map-get($media-queries, $name);\n\n // If the key exists in the map\n @if $value {\n // Prints a media query based on the value\n @media (min-width: $value) {\n @content;\n }\n } @else {\n @warn \"No value could be retrieved from `#{$media-query}`. Please make sure it is defined in `$media-queries` map.\";\n }\n}\n\n// Responsive container\n\n@mixin container {\n padding-right: $gutter-spacing-sm;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-right: $gutter-spacing;\n padding-left: $gutter-spacing;\n }\n}\n","// Typography\n\n// prettier-ignore\n$body-font-family: system-ui, -apple-system, blinkmacsystemfont, \"Segoe UI\",\n roboto, \"Helvetica Neue\", arial, sans-serif, \"Segoe UI Emoji\" !default;\n$mono-font-family: \"SFMono-Regular\", menlo, consolas, monospace !default;\n$root-font-size: 16px !default; // DEPRECATED: previously base font-size for rems\n$body-line-height: 1.4 !default;\n$content-line-height: 1.6 !default;\n$body-heading-line-height: 1.25 !default;\n\n// Font size\n// `-sm` suffix is the size at the small (and above) media query\n\n$font-size-1: 0.5625rem !default;\n$font-size-1-sm: 0.625rem !default;\n$font-size-2: 0.6875rem !default; // h4 - uppercased!, h6 not uppercased, text-small\n$font-size-3: 0.75rem !default; // h5\n$font-size-4: 0.875rem !default;\n$font-size-5: 1rem !default; // h3\n$font-size-6: 1.125rem !default; // h2\n$font-size-7: 1.5rem !default;\n$font-size-8: 2rem !default; // h1\n$font-size-9: 2.25rem !default;\n$font-size-10: 2.625rem !default;\n$font-size-10-sm: 3rem !default;\n\n// Colors\n\n$white: #fff !default;\n$grey-dk-000: #959396 !default;\n$grey-dk-100: #5c5962 !default;\n$grey-dk-200: #44434d !default;\n$grey-dk-250: #302d36 !default;\n$grey-dk-300: #27262b !default;\n$grey-lt-000: #f5f6fa !default;\n$grey-lt-100: #eeebee !default;\n$grey-lt-200: #ecebed !default;\n$grey-lt-300: #e6e1e8 !default;\n$purple-000: #7253ed !default;\n$purple-100: #5e41d0 !default;\n$purple-200: #4e26af !default;\n$purple-300: #381885 !default;\n$blue-000: #2c84fa !default;\n$blue-100: #2869e6 !default;\n$blue-200: #264caf !default;\n$blue-300: #183385 !default;\n$green-000: #41d693 !default;\n$green-100: #11b584 !default;\n$green-200: #009c7b !default;\n$green-300: #026e57 !default;\n$yellow-000: #ffeb82 !default;\n$yellow-100: #fadf50 !default;\n$yellow-200: #f7d12e !default;\n$yellow-300: #e7af06 !default;\n$red-000: #f77e7e !default;\n$red-100: #f96e65 !default;\n$red-200: #e94c4c !default;\n$red-300: #dd2e2e !default;\n\n// Spacing\n\n$spacing-unit: 1rem; // 1rem == 16px\n\n$spacers: (\n sp-0: 0,\n sp-1: $spacing-unit * 0.25,\n sp-2: $spacing-unit * 0.5,\n sp-3: $spacing-unit * 0.75,\n sp-4: $spacing-unit,\n sp-5: $spacing-unit * 1.5,\n sp-6: $spacing-unit * 2,\n sp-7: $spacing-unit * 2.5,\n sp-8: $spacing-unit * 3,\n sp-9: $spacing-unit * 3.5,\n sp-10: $spacing-unit * 4,\n) !default;\n$sp-1: map-get($spacers, sp-1) !default; // 0.25 rem == 4px\n$sp-2: map-get($spacers, sp-2) !default; // 0.5 rem == 8px\n$sp-3: map-get($spacers, sp-3) !default; // 0.75 rem == 12px\n$sp-4: map-get($spacers, sp-4) !default; // 1 rem == 16px\n$sp-5: map-get($spacers, sp-5) !default; // 1.5 rem == 24px\n$sp-6: map-get($spacers, sp-6) !default; // 2 rem == 32px\n$sp-7: map-get($spacers, sp-7) !default; // 2.5 rem == 40px\n$sp-8: map-get($spacers, sp-8) !default; // 3 rem == 48px\n$sp-9: map-get($spacers, sp-9) !default; // 3.5 rem == 56px\n$sp-10: map-get($spacers, sp-10) !default; // 4 rem == 64px\n\n// Borders\n\n$border: 1px solid !default;\n$border-radius: 4px !default;\n$border-color: $grey-lt-100 !default;\n\n// Grid system\n\n$gutter-spacing: $sp-6 !default;\n$gutter-spacing-sm: $sp-4 !default;\n$nav-width: 16.5rem !default;\n$nav-width-md: 15.5rem !default;\n$nav-list-item-height: $sp-6 !default;\n$nav-list-item-height-sm: $sp-8 !default;\n$nav-list-expander-right: true;\n$content-width: 50rem !default;\n$header-height: 3.75rem !default;\n$search-results-width: $content-width - $nav-width !default;\n$transition-duration: 400ms;\n\n// Media queries in pixels\n\n$media-queries: (\n xs: 20rem,\n sm: 31.25rem,\n md: $content-width,\n lg: $content-width + $nav-width,\n xl: 87.5rem,\n) !default;\n","$iueblue-000: #005077;\n$iueblue-100: #005077;\n$iueblue-200: #005077;\n$iueblue-300: #005077;","// The basic two column layout\n\n.side-bar {\n z-index: 0;\n display: flex;\n flex-wrap: wrap;\n background-color: $sidebar-color;\n\n @include mq(md) {\n flex-flow: column nowrap;\n position: fixed;\n width: $nav-width-md;\n height: 100%;\n border-right: $border $border-color;\n align-items: flex-end;\n }\n\n @include mq(lg) {\n width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});\n min-width: $nav-width;\n }\n}\n\n.main {\n @include mq(md) {\n position: relative;\n max-width: $content-width;\n margin-left: $nav-width-md;\n }\n\n @include mq(lg) {\n // stylelint-disable function-name-case\n // disable for Max(), we want to use the CSS max() function\n margin-left: Max(\n #{$nav-width},\n calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width})\n );\n // stylelint-enable function-name-case\n }\n}\n\n.main-content-wrap {\n @include container;\n\n padding-top: $gutter-spacing-sm;\n padding-bottom: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-top: $gutter-spacing;\n padding-bottom: $gutter-spacing;\n }\n}\n\n.main-header {\n z-index: 0;\n display: none;\n background-color: $sidebar-color;\n\n @include mq(md) {\n display: flex;\n justify-content: space-between;\n height: $header-height;\n background-color: $body-background-color;\n border-bottom: $border $border-color;\n }\n\n &.nav-open {\n display: block;\n\n @include mq(md) {\n display: flex;\n }\n }\n}\n\n.site-nav,\n.site-header,\n.site-footer {\n width: 100%;\n\n @include mq(lg) {\n width: $nav-width;\n }\n}\n\n.site-nav {\n display: none;\n\n &.nav-open {\n display: block;\n }\n\n @include mq(md) {\n display: block;\n padding-top: $sp-8;\n padding-bottom: $gutter-spacing-sm;\n overflow-y: auto;\n flex: 1 1 auto;\n }\n}\n\n.site-header {\n display: flex;\n min-height: $header-height;\n align-items: center;\n\n @include mq(md) {\n height: $header-height;\n max-height: $header-height;\n border-bottom: $border $border-color;\n }\n}\n\n.site-title {\n @include container;\n\n flex-grow: 1;\n display: flex;\n height: 100%;\n align-items: center;\n padding-top: $sp-3;\n padding-bottom: $sp-3;\n color: $body-heading-color;\n @include fs-6;\n\n @include mq(md) {\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n }\n}\n\n@if variable-exists(logo) {\n .site-logo {\n width: 100%;\n height: 100%;\n background-image: url($logo);\n background-repeat: no-repeat;\n background-position: left center;\n background-size: contain;\n }\n}\n\n.site-button {\n display: flex;\n height: 100%;\n padding: $gutter-spacing-sm;\n align-items: center;\n}\n\n@include mq(md) {\n .site-header .site-button {\n display: none;\n }\n}\n\n.site-title:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n}\n\n.site-button:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n}\n\n// stylelint-disable selector-max-type\n\nbody {\n position: relative;\n padding-bottom: $sp-10;\n overflow-y: scroll;\n\n @include mq(md) {\n position: static;\n padding-bottom: 0;\n }\n}\n\n// stylelint-enable selector-max-type\n\n.site-footer {\n @include container;\n\n position: absolute;\n bottom: 0;\n left: 0;\n padding-top: $sp-4;\n padding-bottom: $sp-4;\n color: $grey-dk-000;\n @include fs-2;\n\n @include mq(md) {\n position: static;\n justify-self: end;\n }\n}\n\n.icon {\n width: $sp-5;\n height: $sp-5;\n color: $link-color;\n}\n","@charset \"UTF-8\";\n\n// Styles for rendered markdown in the .main-content container\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity, selector-max-id\n\n.main-content {\n line-height: $content-line-height;\n\n ol,\n ul,\n dl,\n pre,\n address,\n blockquote,\n .table-wrapper {\n margin-top: 0.5em;\n }\n\n a {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n ul,\n ol {\n padding-left: 1.5em;\n }\n\n li {\n .highlight {\n margin-top: $sp-1;\n }\n }\n\n ol {\n list-style-type: none;\n counter-reset: step-counter;\n\n > li {\n position: relative;\n\n &::before {\n position: absolute;\n top: 0.2em;\n left: -1.6em;\n color: $grey-dk-000;\n content: counter(step-counter);\n counter-increment: step-counter;\n @include fs-3;\n\n @include mq(sm) {\n top: 0.11em;\n }\n }\n\n ol {\n counter-reset: sub-counter;\n\n > li {\n &::before {\n content: counter(sub-counter, lower-alpha);\n counter-increment: sub-counter;\n }\n }\n }\n }\n }\n\n ul {\n list-style: none;\n\n > li {\n &::before {\n position: absolute;\n margin-left: -1.4em;\n color: $grey-dk-000;\n content: \"•\";\n }\n }\n }\n\n .task-list-item {\n &::before {\n content: \"\";\n }\n }\n\n .task-list-item-checkbox {\n margin-right: 0.6em;\n margin-left: -1.4em;\n\n // The same margin-left is used above for ul > li::before\n }\n\n hr + * {\n margin-top: 0;\n }\n\n h1:first-of-type {\n margin-top: 0.5em;\n }\n\n dl {\n display: grid;\n grid-template: auto / 10em 1fr;\n }\n\n dt,\n dd {\n margin: 0.25em 0;\n }\n\n dt {\n grid-column: 1;\n font-weight: 500;\n text-align: right;\n\n &::after {\n content: \":\";\n }\n }\n\n dd {\n grid-column: 2;\n margin-bottom: 0;\n margin-left: 1em;\n\n blockquote,\n div,\n dl,\n dt,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n li,\n ol,\n p,\n pre,\n table,\n ul,\n .table-wrapper {\n &:first-child {\n margin-top: 0;\n }\n }\n }\n\n dd,\n ol,\n ul {\n dl:first-child {\n dt:first-child,\n dd:nth-child(2) {\n margin-top: 0;\n }\n }\n }\n\n .anchor-heading {\n position: absolute;\n right: -$sp-4;\n width: $sp-5;\n height: 100%;\n padding-right: $sp-1;\n padding-left: $sp-1;\n overflow: visible;\n\n @include mq(md) {\n right: auto;\n left: -$sp-5;\n }\n\n svg {\n display: inline-block;\n width: 100%;\n height: 100%;\n color: $link-color;\n visibility: hidden;\n }\n }\n\n .anchor-heading:hover,\n .anchor-heading:focus,\n h1:hover > .anchor-heading,\n h2:hover > .anchor-heading,\n h3:hover > .anchor-heading,\n h4:hover > .anchor-heading,\n h5:hover > .anchor-heading,\n h6:hover > .anchor-heading {\n svg {\n visibility: visible;\n }\n }\n\n summary {\n cursor: pointer;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n #toctitle {\n position: relative;\n margin-top: 1.5em;\n margin-bottom: 0.25em;\n\n + table,\n + .table-wrapper,\n + .code-example,\n + .highlighter-rouge,\n + .sectionbody .listingblock {\n margin-top: 1em;\n }\n\n + p:not(.label) {\n margin-top: 0;\n }\n }\n\n > h1:first-child,\n > h2:first-child,\n > h3:first-child,\n > h4:first-child,\n > h5:first-child,\n > h6:first-child,\n > .sect1:first-child > h2,\n > .sect2:first-child > h3,\n > .sect3:first-child > h4,\n > .sect4:first-child > h5,\n > .sect5:first-child > h6 {\n margin-top: $sp-2;\n }\n}\n","// Main nav, breadcrumb, etc...\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity\n\n.nav-list {\n padding: 0;\n margin-top: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-list-item {\n @include fs-4;\n\n position: relative;\n margin: 0;\n\n @include mq(md) {\n @include fs-3;\n }\n\n .nav-list-link {\n display: block;\n min-height: $nav-list-item-height-sm;\n padding-top: $sp-1;\n padding-bottom: $sp-1;\n line-height: #{$nav-list-item-height-sm - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height-sm;\n padding-left: $gutter-spacing-sm;\n } @else {\n padding-right: $gutter-spacing-sm;\n padding-left: $nav-list-item-height-sm;\n }\n\n @include mq(md) {\n min-height: $nav-list-item-height;\n line-height: #{$nav-list-item-height - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height;\n padding-left: $gutter-spacing;\n } @else {\n padding-right: $gutter-spacing;\n padding-left: $nav-list-item-height;\n }\n }\n\n &.external > svg {\n width: $sp-4;\n height: $sp-4;\n vertical-align: text-bottom;\n }\n\n &.active {\n font-weight: 600;\n text-decoration: none;\n }\n\n &:hover,\n &.active {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n }\n }\n\n .nav-list-expander {\n position: absolute;\n @if $nav-list-expander-right {\n right: 0;\n }\n\n width: $nav-list-item-height-sm;\n height: $nav-list-item-height-sm;\n padding: #{$nav-list-item-height-sm * 0.25};\n color: $link-color;\n\n @include mq(md) {\n width: $nav-list-item-height;\n height: $nav-list-item-height;\n padding: #{$nav-list-item-height * 0.25};\n }\n\n &:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n }\n\n @if $nav-list-expander-right {\n svg {\n transform: rotate(90deg);\n }\n }\n }\n\n > .nav-list {\n display: none;\n padding-left: $sp-3;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n\n .nav-list-link {\n color: $nav-child-link-color;\n }\n\n .nav-list-expander {\n color: $nav-child-link-color;\n }\n }\n }\n\n &.active {\n > .nav-list-expander svg {\n @if $nav-list-expander-right {\n transform: rotate(-90deg);\n } @else {\n transform: rotate(90deg);\n }\n }\n\n > .nav-list {\n display: block;\n }\n }\n }\n}\n\n.nav-category {\n padding: $sp-2 $gutter-spacing-sm;\n font-weight: 600;\n text-align: start;\n text-transform: uppercase;\n border-bottom: $border $border-color;\n @include fs-2;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing;\n margin-top: $gutter-spacing-sm;\n text-align: start;\n\n &:first-child {\n margin-top: 0;\n }\n }\n}\n\n.nav-list.nav-category-list {\n > .nav-list-item {\n margin: 0;\n\n > .nav-list {\n padding: 0;\n\n > .nav-list-item {\n > .nav-list-link {\n color: $link-color;\n }\n\n > .nav-list-expander {\n color: $link-color;\n }\n }\n }\n }\n}\n\n// Aux nav\n\n.aux-nav {\n height: 100%;\n overflow-x: auto;\n @include fs-2;\n\n .aux-nav-list {\n display: flex;\n height: 100%;\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n .aux-nav-list-item {\n display: inline-block;\n height: 100%;\n padding: 0;\n margin: 0;\n }\n\n @include mq(md) {\n padding-right: $gutter-spacing-sm;\n }\n}\n\n// Breadcrumb nav\n\n.breadcrumb-nav {\n @include mq(md) {\n margin-top: -$sp-4;\n }\n}\n\n.breadcrumb-nav-list {\n padding-left: 0;\n margin-bottom: $sp-3;\n list-style: none;\n}\n\n.breadcrumb-nav-list-item {\n display: table-cell;\n @include fs-2;\n\n &::before {\n display: none;\n }\n\n &::after {\n display: inline-block;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $grey-dk-000;\n content: \"/\";\n }\n\n &:last-child {\n &::after {\n content: \"\";\n }\n }\n}\n","// Typography\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\nh1,\n.text-alpha {\n @include fs-8;\n\n font-weight: 300;\n}\n\nh2,\n.text-beta,\n#toctitle {\n @include fs-6;\n}\n\nh3,\n.text-gamma {\n @include fs-5;\n}\n\nh4,\n.text-delta {\n @include fs-2;\n\n font-weight: 400;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n}\n\nh4 code {\n text-transform: none;\n}\n\nh5,\n.text-epsilon {\n @include fs-3;\n}\n\nh6,\n.text-zeta {\n @include fs-2;\n}\n\n.text-small {\n @include fs-2;\n}\n\n.text-mono {\n font-family: $mono-font-family !important;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n","// Labels (not the form kind)\n\n// this :not() prevents a style clash with Mermaid.js's\n// diagram labels, which also use .label\n// for more, see https://github.com/just-the-docs/just-the-docs/issues/1272\n// and the accompanying PR\n.label:not(g),\n.label-blue:not(g) {\n display: inline-block;\n padding: 0.16em 0.56em;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $white;\n text-transform: uppercase;\n vertical-align: middle;\n background-color: $blue-100;\n @include fs-2;\n\n border-radius: 12px;\n}\n\n.label-green:not(g) {\n background-color: $green-200;\n}\n\n.label-purple:not(g) {\n background-color: $purple-100;\n}\n\n.label-red:not(g) {\n background-color: $red-200;\n}\n\n.label-yellow:not(g) {\n color: $grey-dk-200;\n background-color: $yellow-200;\n}\n","// Buttons and things that look like buttons\n// stylelint-disable color-named\n\n.btn {\n display: inline-block;\n box-sizing: border-box;\n padding: 0.3em 1em;\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n line-height: 1.5;\n color: $link-color;\n text-decoration: none;\n vertical-align: baseline;\n cursor: pointer;\n background-color: $base-button-color;\n border-width: 0;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n appearance: none;\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: darken($link-color, 2%);\n }\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n text-decoration: none;\n background-color: darken($base-button-color, 1%);\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($base-button-color, 3%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken(#dcdcdc, 5%);\n }\n\n &:disabled,\n &.disabled {\n &,\n &:hover {\n color: rgba(102, 102, 102, 0.5);\n cursor: default;\n background-color: rgba(229, 229, 229, 0.5);\n background-image: none;\n box-shadow: none;\n }\n }\n}\n\n.btn-outline {\n color: $link-color;\n background: transparent;\n box-shadow: inset 0 0 0 2px $grey-lt-300;\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n color: darken($link-color, 4%);\n text-decoration: none;\n background-color: transparent;\n box-shadow: inset 0 0 0 3px $grey-lt-300;\n }\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow:\n inset 0 0 0 2px $grey-dk-100,\n 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: inset 0 0 0 2px $grey-dk-100;\n }\n}\n\n.btn-primary {\n @include btn-color($white, $btn-primary-color);\n}\n\n.btn-purple {\n @include btn-color($white, $purple-100);\n}\n\n.btn-blue {\n @include btn-color($white, $blue-000);\n}\n\n.btn-green {\n @include btn-color($white, $green-100);\n}\n\n.btn-reset {\n background: none;\n border: none;\n margin: 0;\n text-align: inherit;\n font: inherit;\n border-radius: 0;\n appearance: none;\n}\n","// Colored button\n\n@mixin btn-color($fg, $bg) {\n color: $fg;\n background-color: darken($bg, 2%);\n background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%));\n box-shadow:\n 0 1px 3px rgba(0, 0, 0, 0.25),\n 0 4px 10px rgba(0, 0, 0, 0.12);\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: $fg;\n background-color: darken($bg, 4%);\n background-image: linear-gradient((lighten($bg, 2%), darken($bg, 4%)));\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($bg, 5%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken($bg, 10%);\n }\n}\n","// Search input and autocomplete\n\n.search {\n position: relative;\n z-index: 2;\n flex-grow: 1;\n height: $sp-10;\n padding: $sp-2;\n transition: padding linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: relative !important;\n width: auto !important;\n height: 100% !important;\n padding: 0;\n transition: none;\n }\n}\n\n.search-input-wrap {\n position: relative;\n z-index: 1;\n height: $sp-8;\n overflow: hidden;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n transition: height linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: absolute;\n width: 100%;\n max-width: $search-results-width;\n height: 100% !important;\n border-radius: 0;\n box-shadow: none;\n transition: width ease $transition-duration;\n }\n}\n\n.search-input {\n position: absolute;\n width: 100%;\n height: 100%;\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing-sm + $sp-5};\n font-size: 1rem;\n color: $body-text-color;\n background-color: $search-background-color;\n border-top: 0;\n border-right: 0;\n border-bottom: 0;\n border-left: 0;\n border-radius: 0;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing + $sp-5};\n font-size: 0.875rem;\n background-color: $body-background-color;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n &:focus {\n outline: 0;\n\n + .search-label .search-icon {\n color: $link-color;\n }\n }\n}\n\n.search-label {\n position: absolute;\n display: flex;\n height: 100%;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-left: $gutter-spacing;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n .search-icon {\n width: #{$sp-4 * 1.2};\n height: #{$sp-4 * 1.2};\n align-self: center;\n color: $grey-dk-000;\n }\n}\n\n.search-results {\n position: absolute;\n left: 0;\n display: none;\n width: 100%;\n max-height: calc(100% - #{$sp-10});\n overflow-y: auto;\n background-color: $search-background-color;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n\n @include mq(md) {\n top: 100%;\n width: $search-results-width;\n max-height: calc(100vh - 200%) !important;\n }\n}\n\n.search-results-list {\n padding-left: 0;\n margin-bottom: $sp-1;\n list-style: none;\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n}\n\n.search-results-list-item {\n padding: 0;\n margin: 0;\n}\n\n.search-result {\n display: block;\n padding: $sp-1 $sp-3;\n\n &:hover,\n &.active {\n background-color: $feedback-color;\n }\n}\n\n.search-result-title {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 40%;\n padding-right: $sp-2;\n vertical-align: top;\n }\n}\n\n.search-result-doc {\n display: flex;\n align-items: center;\n word-wrap: break-word;\n\n &.search-result-doc-parent {\n opacity: 0.5;\n @include fs-3;\n\n @include mq(md) {\n @include fs-2;\n }\n }\n\n .search-result-icon {\n width: $sp-4;\n height: $sp-4;\n margin-right: $sp-2;\n color: $link-color;\n flex-shrink: 0;\n }\n\n .search-result-doc-title {\n overflow: auto;\n }\n}\n\n.search-result-section {\n margin-left: #{$sp-4 + $sp-2};\n word-wrap: break-word;\n}\n\n.search-result-rel-url {\n display: block;\n margin-left: #{$sp-4 + $sp-2};\n overflow: hidden;\n color: $search-result-preview-color;\n text-overflow: ellipsis;\n white-space: nowrap;\n @include fs-1;\n}\n\n.search-result-previews {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n padding-left: $sp-4;\n margin-left: $sp-2;\n color: $search-result-preview-color;\n word-wrap: break-word;\n border-left: $border;\n border-left-color: $border-color;\n @include fs-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 60%;\n padding-left: $sp-2;\n margin-left: 0;\n vertical-align: top;\n }\n}\n\n.search-result-preview + .search-result-preview {\n margin-top: $sp-1;\n}\n\n.search-result-highlight {\n font-weight: bold;\n}\n\n.search-no-result {\n padding: $sp-2 $sp-3;\n @include fs-3;\n}\n\n.search-button {\n position: fixed;\n right: $sp-4;\n bottom: $sp-4;\n display: flex;\n width: $sp-9;\n height: $sp-9;\n background-color: $search-background-color;\n border: 1px solid rgba($link-color, 0.3);\n border-radius: #{$sp-9 * 0.5};\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n align-items: center;\n justify-content: center;\n}\n\n.search-overlay {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1;\n width: 0;\n height: 0;\n background-color: rgba(0, 0, 0, 0.3);\n opacity: 0;\n transition:\n opacity ease $transition-duration,\n width 0s $transition-duration,\n height 0s $transition-duration;\n}\n\n.search-active {\n .search {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .search-input-wrap {\n height: $sp-10;\n border-radius: 0;\n\n @include mq(md) {\n width: $search-results-width;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n }\n }\n\n .search-input {\n background-color: $search-background-color;\n\n @include mq(md) {\n padding-left: 2.3rem;\n }\n }\n\n .search-label {\n @include mq(md) {\n padding-left: 0.6rem;\n }\n }\n\n .search-results {\n display: block;\n }\n\n .search-overlay {\n width: 100%;\n height: 100%;\n opacity: 1;\n transition:\n opacity ease $transition-duration,\n width 0s,\n height 0s;\n }\n\n @include mq(md) {\n .main {\n position: fixed;\n right: 0;\n left: 0;\n }\n }\n\n .main-header {\n padding-top: $sp-10;\n\n @include mq(md) {\n padding-top: 0;\n }\n }\n}\n","// Tables\n// stylelint-disable max-nesting-depth, selector-no-type, selector-max-type\n\n.table-wrapper {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: $sp-5;\n overflow-x: auto;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n}\n\ntable {\n display: table;\n min-width: 100%;\n border-collapse: separate;\n}\n\nth,\ntd {\n @include fs-3;\n\n min-width: 7.5rem;\n padding: $sp-2 $sp-3;\n background-color: $table-background-color;\n border-bottom: $border rgba($border-color, 0.5);\n border-left: $border $border-color;\n\n &:first-of-type {\n border-left: 0;\n }\n}\n\ntbody {\n tr {\n &:last-of-type {\n th,\n td {\n border-bottom: 0;\n }\n\n td {\n padding-bottom: $sp-3;\n }\n }\n }\n}\n\nthead {\n th {\n border-bottom: $border $border-color;\n }\n}\n","// Code and syntax highlighting\n// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type, scss/comment-no-empty\n\n// {% raw %}\n\n// This instruction applies to all queues not within 'pre' or 'figure', avoiding 'code' generated by the highlight.\n:not(pre, figure) {\n & > code {\n padding: 0.2em 0.15em;\n font-weight: 400;\n background-color: $code-background-color;\n border: $border $border-color;\n border-radius: $border-radius;\n }\n}\n\n// Avoid appearance of dark border around visited code links in Safari\na:visited code {\n border-color: $border-color;\n}\n\n// Content structure for highlighted code blocks using fences or Liquid\n//\n// ```[LANG]...```, no kramdown line_numbers:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n//\n// ```[LANG]...```, kramdown line_numbers = true:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.rouge-gutter.gl > pre.lineno\n// | td.rouge-code > pre\n//\n// {% highlight LANG %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n//\n// {% highlight LANG linenos %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.gutter.gl > pre.lineno\n// | td.code > pre\n//\n// ----...---- (AsciiDoc)\n// div.listingblock > div.content > pre.rouge.highlight\n//\n// fix_linenos removes the outermost pre when it encloses table.rouge-table\n//\n// See docs/index-test.md for some tests.\n//\n// No kramdown line_numbers: fences and Liquid highlighting look the same.\n// Kramdown line_numbers = true: fences have a wider gutter than with Liquid?\n\n// ```[LANG]...```\n// or in AsciiDoc:\n//\n// ----\n// ...\n// ----\n\n// the code may appear with 3 different types:\n// container \\ case: default case, code with line number, code with html rendering\n// top level: div.highlighter-rouge, figure.highlight, figure.highlight\n// second level: div.highlight, div.table-wrapper, pre.highlight\n// third level: pre.highlight, td.code, absent\n// last level: code, pre, code (optionality)\n// highlighter level: span, span, span\n// the spacing are only in the second level for case 1, 3 and in the third level for case 2\n// in AsciiDoc, there is a parent container that contains optionally a title and the content.\n\n// select top level container\ndiv.highlighter-rouge,\ndiv.listingblock > div.content,\nfigure.highlight {\n margin-top: 0;\n margin-bottom: $sp-3;\n background-color: $code-background-color;\n border-radius: $border-radius;\n box-shadow: none;\n -webkit-overflow-scrolling: touch;\n position: relative;\n padding: 0;\n\n // copy button (or other button)\n // the button appear only when there is a hover on the code or focus on button\n > button {\n width: $sp-3;\n opacity: 0;\n position: absolute;\n top: 0;\n right: 0;\n border: $sp-3 solid $code-background-color;\n background-color: $code-background-color;\n color: $body-text-color;\n box-sizing: content-box;\n\n svg {\n fill: $body-text-color;\n }\n\n &:active {\n text-decoration: none;\n outline: none;\n opacity: 1;\n }\n\n &:focus {\n opacity: 1;\n }\n }\n\n // the button can be seen by doing a simple hover in the code, there is no need to go over the location of the button\n &:hover {\n > button {\n cursor: copy;\n opacity: 1;\n }\n }\n}\n\n// setting the spacing and scrollbar on the second level for the first case\n// remove all space on the second and third level\n// this is a mixin to accommodate for the slightly different structures generated via Markdown vs AsciiDoc\n@mixin scroll-and-spacing($code-div, $pre-select) {\n #{$code-div} {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 0;\n }\n\n #{$pre-select},\n code {\n padding: 0;\n margin: 0;\n border: 0;\n }\n}\n\n// for Markdown\ndiv.highlighter-rouge {\n @include scroll-and-spacing(\"div.highlight\", \"pre.highlight\");\n}\n\n// for AsciiDoc. we also need to fix the margins for its parent container.\ndiv.listingblock {\n @include scroll-and-spacing(\"div.content\", \"div.content > pre\");\n\n margin-top: 0;\n margin-bottom: $sp-3;\n}\n\n// {% highlight LANG %}...{% endhighlight %},\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the second level for the thirt case\n// the css rule are apply only to the last code enviroment\n// setting the scroolbar\nfigure.highlight {\n pre,\n :not(pre) > code {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 0;\n }\n}\n\n// ```[LANG]...```, kramdown line_numbers = true,\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the thirt level for the second case\n.highlight .table-wrapper {\n padding: $sp-3 0;\n margin: 0;\n border: 0;\n box-shadow: none;\n\n td,\n pre {\n @include fs-2;\n\n min-width: 0;\n padding: 0;\n background-color: $code-background-color;\n border: 0;\n }\n\n td.gl {\n width: 1em;\n padding-right: $sp-3;\n padding-left: $sp-3;\n }\n\n pre {\n margin: 0;\n line-height: 2;\n }\n}\n\n// Code examples: html render of a code\n.code-example,\n.listingblock > .title {\n padding: $sp-3;\n margin-bottom: $sp-3;\n overflow: auto;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n\n + .highlighter-rouge,\n + .sectionbody .listingblock,\n + .content,\n + figure.highlight {\n position: relative;\n margin-top: -$sp-4;\n border-right: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n border-left: 1px solid $border-color;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n\n// Mermaid diagram code blocks should be left unstyled.\ncode.language-mermaid {\n padding: 0;\n background-color: inherit;\n border: 0;\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight,\npre.highlight {\n background: $code-background-color; // Code Background\n // For Backwards Compatibility Before $code-linenumber-color was added\n @if variable-exists(code-linenumber-color) {\n color: $code-linenumber-color; // Code Line Numbers\n } @else {\n color: $body-text-color; // Code Line Numbers\n }\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight pre {\n background: $code-background-color; // Code Background\n}\n\n// {% endraw %}\n","// Utility classes for colors\n\n// Text colors\n\n.text-grey-dk-000 {\n color: $grey-dk-000 !important;\n}\n\n.text-grey-dk-100 {\n color: $grey-dk-100 !important;\n}\n\n.text-grey-dk-200 {\n color: $grey-dk-200 !important;\n}\n\n.text-grey-dk-250 {\n color: $grey-dk-250 !important;\n}\n\n.text-grey-dk-300 {\n color: $grey-dk-300 !important;\n}\n\n.text-grey-lt-000 {\n color: $grey-lt-000 !important;\n}\n\n.text-grey-lt-100 {\n color: $grey-lt-100 !important;\n}\n\n.text-grey-lt-200 {\n color: $grey-lt-200 !important;\n}\n\n.text-grey-lt-300 {\n color: $grey-lt-300 !important;\n}\n\n.text-blue-000 {\n color: $blue-000 !important;\n}\n\n.text-blue-100 {\n color: $blue-100 !important;\n}\n\n.text-blue-200 {\n color: $blue-200 !important;\n}\n\n.text-blue-300 {\n color: $blue-300 !important;\n}\n\n.text-green-000 {\n color: $green-000 !important;\n}\n\n.text-green-100 {\n color: $green-100 !important;\n}\n\n.text-green-200 {\n color: $green-200 !important;\n}\n\n.text-green-300 {\n color: $green-300 !important;\n}\n\n.text-purple-000 {\n color: $purple-000 !important;\n}\n\n.text-purple-100 {\n color: $purple-100 !important;\n}\n\n.text-purple-200 {\n color: $purple-200 !important;\n}\n\n.text-purple-300 {\n color: $purple-300 !important;\n}\n\n.text-yellow-000 {\n color: $yellow-000 !important;\n}\n\n.text-yellow-100 {\n color: $yellow-100 !important;\n}\n\n.text-yellow-200 {\n color: $yellow-200 !important;\n}\n\n.text-yellow-300 {\n color: $yellow-300 !important;\n}\n\n.text-red-000 {\n color: $red-000 !important;\n}\n\n.text-red-100 {\n color: $red-100 !important;\n}\n\n.text-red-200 {\n color: $red-200 !important;\n}\n\n.text-red-300 {\n color: $red-300 !important;\n}\n\n// Background colors\n\n.bg-grey-dk-000 {\n background-color: $grey-dk-000 !important;\n}\n\n.bg-grey-dk-100 {\n background-color: $grey-dk-100 !important;\n}\n\n.bg-grey-dk-200 {\n background-color: $grey-dk-200 !important;\n}\n\n.bg-grey-dk-250 {\n background-color: $grey-dk-250 !important;\n}\n\n.bg-grey-dk-300 {\n background-color: $grey-dk-300 !important;\n}\n\n.bg-grey-lt-000 {\n background-color: $grey-lt-000 !important;\n}\n\n.bg-grey-lt-100 {\n background-color: $grey-lt-100 !important;\n}\n\n.bg-grey-lt-200 {\n background-color: $grey-lt-200 !important;\n}\n\n.bg-grey-lt-300 {\n background-color: $grey-lt-300 !important;\n}\n\n.bg-blue-000 {\n background-color: $blue-000 !important;\n}\n\n.bg-blue-100 {\n background-color: $blue-100 !important;\n}\n\n.bg-blue-200 {\n background-color: $blue-200 !important;\n}\n\n.bg-blue-300 {\n background-color: $blue-300 !important;\n}\n\n.bg-green-000 {\n background-color: $green-000 !important;\n}\n\n.bg-green-100 {\n background-color: $green-100 !important;\n}\n\n.bg-green-200 {\n background-color: $green-200 !important;\n}\n\n.bg-green-300 {\n background-color: $green-300 !important;\n}\n\n.bg-purple-000 {\n background-color: $purple-000 !important;\n}\n\n.bg-purple-100 {\n background-color: $purple-100 !important;\n}\n\n.bg-purple-200 {\n background-color: $purple-200 !important;\n}\n\n.bg-purple-300 {\n background-color: $purple-300 !important;\n}\n\n.bg-yellow-000 {\n background-color: $yellow-000 !important;\n}\n\n.bg-yellow-100 {\n background-color: $yellow-100 !important;\n}\n\n.bg-yellow-200 {\n background-color: $yellow-200 !important;\n}\n\n.bg-yellow-300 {\n background-color: $yellow-300 !important;\n}\n\n.bg-red-000 {\n background-color: $red-000 !important;\n}\n\n.bg-red-100 {\n background-color: $red-100 !important;\n}\n\n.bg-red-200 {\n background-color: $red-200 !important;\n}\n\n.bg-red-300 {\n background-color: $red-300 !important;\n}\n","// Utility classes for layout\n\n// Display\n\n.d-block {\n display: block !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .d-sm-block, .d-md-none, .d-lg-inline\n .d-#{$media-query}-block {\n display: block !important;\n }\n .d-#{$media-query}-flex {\n display: flex !important;\n }\n .d-#{$media-query}-inline {\n display: inline !important;\n }\n .d-#{$media-query}-inline-block {\n display: inline-block !important;\n }\n .d-#{$media-query}-none {\n display: none !important;\n }\n }\n }\n}\n\n// Horizontal alignment\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.flex-justify-start {\n justify-content: flex-start !important;\n}\n\n.flex-justify-end {\n justify-content: flex-end !important;\n}\n\n.flex-justify-between {\n justify-content: space-between !important;\n}\n\n.flex-justify-around {\n justify-content: space-around !important;\n}\n\n// Vertical alignment\n\n.v-align-baseline {\n vertical-align: baseline !important;\n}\n\n.v-align-bottom {\n vertical-align: bottom !important;\n}\n\n.v-align-middle {\n vertical-align: middle !important;\n}\n\n.v-align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.v-align-text-top {\n vertical-align: text-top !important;\n}\n\n.v-align-top {\n vertical-align: top !important;\n}\n","// Utility classes for typography\n\n.fs-1 {\n @include fs-1;\n}\n\n.fs-2 {\n @include fs-2;\n}\n\n.fs-3 {\n @include fs-3;\n}\n\n.fs-4 {\n @include fs-4;\n}\n\n.fs-5 {\n @include fs-5;\n}\n\n.fs-6 {\n @include fs-6;\n}\n\n.fs-7 {\n @include fs-7;\n}\n\n.fs-8 {\n @include fs-8;\n}\n\n.fs-9 {\n @include fs-9;\n}\n\n.fs-10 {\n @include fs-10;\n}\n\n.fw-300 {\n font-weight: 300 !important;\n}\n\n.fw-400 {\n font-weight: 400 !important;\n}\n\n.fw-500 {\n font-weight: 500 !important;\n}\n\n.fw-700 {\n font-weight: 700 !important;\n}\n\n.lh-0 {\n line-height: 0 !important;\n}\n\n.lh-default {\n line-height: $body-line-height;\n}\n\n.lh-tight {\n line-height: $body-heading-line-height;\n}\n\n.ls-5 {\n letter-spacing: 0.05em !important;\n}\n\n.ls-10 {\n letter-spacing: 0.1em !important;\n}\n\n.ls-0 {\n letter-spacing: 0 !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n","// Utility classes for lists\n\n// stylelint-disable selector-max-type\n\n.list-style-none {\n padding: 0 !important;\n margin: 0 !important;\n list-style: none !important;\n\n li {\n &::before {\n display: none !important;\n }\n }\n}\n","// Utility classes for margins and padding\n\n// stylelint-disable block-opening-brace-space-after, block-opening-brace-space-before\n\n// Margin spacer utilities\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-0, .m-1, .m-2...\n .m-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n .mx-#{$scale}-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-sm-0, .m-md-1, .m-lg-2...\n .m-#{$media-query}-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$media-query}-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$media-query}-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$media-query}-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n }\n }\n}\n\n// Padding spacer utilities\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-0, .p-1, .p-2...\n .p-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @include mq($media-query) {\n @for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-sm-0, .p-md-1, .p-lg-2...\n .p-#{$media-query}-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$media-query}-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$media-query}-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n }\n }\n}\n","// stylelint-disable selector-max-specificity, selector-max-id, selector-max-type, selector-no-qualifying-type\n\n@media print {\n .site-footer,\n .site-button,\n #edit-this-page,\n #back-to-top,\n .site-nav,\n .main-header {\n display: none !important;\n }\n\n .side-bar {\n width: 100%;\n height: auto;\n border-right: 0 !important;\n }\n\n .site-header {\n border-bottom: 1px solid $border-color;\n }\n\n .site-title {\n font-size: 1rem !important;\n font-weight: 700 !important;\n }\n\n .text-small {\n font-size: 8pt !important;\n }\n\n pre.highlight {\n border: 1px solid $border-color;\n }\n\n .main {\n max-width: none;\n margin-left: 0;\n }\n}\n","// Skipnav\n// Skip to main content\n\na.skip-to-main {\n left: -999px;\n position: absolute;\n top: auto;\n width: 1px;\n height: 1px;\n overflow: hidden;\n z-index: -999;\n}\n\na.skip-to-main:focus,\na.skip-to-main:active {\n color: $link-color;\n background-color: $body-background-color;\n left: auto;\n top: auto;\n width: 30%;\n height: auto;\n overflow: auto;\n margin: 10px 35%;\n padding: 5px;\n border-radius: 15px;\n border: 4px solid $btn-primary-color;\n text-align: center;\n font-size: 1.2em;\n z-index: 999;\n}\n","\n\n$logo: \"/assets/images/logo.png\";\n\n@import \"./support/support\";\n@import \"./custom/setup\";\n@import \"./color_schemes/light\";\n\n@import \"./color_schemes/iue\";\n\n@import \"./modules\";\ndiv.opaque {\n background-color: $body-background-color;\n}p.warning, blockquote.warning {\n background: rgba($yellow-000, 0.2);\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $yellow-300;\n content: \"Warning\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .warning-title {\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.warning-title, blockquote.warning-title {\n background: rgba($yellow-000, 0.2);\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.warning {\n margin-left: 0;\n margin-right: 0;\n \n > p:first-child {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.warning-title {\n margin-left: 0;\n margin-right: 0;\n \n > p:nth-child(2) {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\np.danger, blockquote.danger {\n background: rgba($red-000, 0.2);\n border-left: $border-radius solid $red-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $red-300;\n content: \"Danger\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .danger-title {\n color: $red-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.danger-title, blockquote.danger-title {\n background: rgba($red-000, 0.2);\n border-left: $border-radius solid $red-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $red-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.danger {\n margin-left: 0;\n margin-right: 0;\n \n > p:first-child {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.danger-title {\n margin-left: 0;\n margin-right: 0;\n \n > p:nth-child(2) {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\np.note, blockquote.note {\n background: rgba($iueblue-000, 0.2);\n border-left: $border-radius solid $iueblue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $iueblue-300;\n content: \"Note\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .note-title {\n color: $iueblue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.note-title, blockquote.note-title {\n background: rgba($iueblue-000, 0.2);\n border-left: $border-radius solid $iueblue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $iueblue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.note {\n margin-left: 0;\n margin-right: 0;\n \n > p:first-child {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.note-title {\n margin-left: 0;\n margin-right: 0;\n \n > p:nth-child(2) {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n@import \"./custom/custom\";\n\n\n"],"file":"just-the-docs-default.css"} \ No newline at end of file diff --git a/docs/_site/assets/css/just-the-docs-light.css.map b/docs/_site/assets/css/just-the-docs-light.css.map index b2f8636c..83b9b332 100644 --- a/docs/_site/assets/css/just-the-docs-light.css.map +++ b/docs/_site/assets/css/just-the-docs-light.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/vendor/OneLightJekyll/syntax.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/vendor/normalize.scss/normalize.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/base.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/color_schemes/light.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/support/mixins/_typography.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/support/mixins/_layout.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/support/_variables.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/layout.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/content.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/navigation.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/typography.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/labels.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/buttons.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/support/mixins/_buttons.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/search.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/tables.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/code.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/utilities/_colors.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/utilities/_layout.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/utilities/_typography.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/utilities/_lists.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/utilities/_spacing.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/print.scss","../../../../../../../opt/homebrew/lib/ruby/gems/3.3.0/gems/just-the-docs-0.7.0/_sass/skiptomain.scss","just-the-docs-light.scss","../../_sass/custom/setup.scss"],"names":[],"mappings":"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EACA;;;AAGF;EACE,OItBW;EJuBX;;;AAGF;EACE;EACA,uBI/BY;EJgCZ;;AAEA;EACE;;;AAIJ;EACE,aIvEiB;EJwEjB;EACA,aIvEiB;;;AJ0EnB;AAAA;EAEE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA,kBI/DY;EJgEZ;;;AAIF;EACE;EAGA;EACA;EACA;EACA;;;AK7GF;EACE;EACA;EACA;EACA,kBD6BY;;ADrBV;EEZJ;IAOI;IACA;IACA,ODwFW;ICvFX;IACA;IACA;;;AFAA;EEZJ;IAgBI;IACA,WD+EQ;;;;ADpFR;EESJ;IAEI;IACA,WD6EY;IC5EZ,aDwEW;;;ADrFX;EESJ;IAUI;;;;AAQJ;EFhBE,eCuDK;EDtDL,cCsDK;ECpCL,aDoCK;ECnCL,gBDmCK;;ADlEH;EE2BJ;IFZI,eCqDG;IDpDH,cCoDG;;;ADpEH;EE2BJ;IAOI,aDkCG;ICjCH,gBDiCG;;;;AC7BP;EACE;EACA;EACA,kBDrBY;;ADrBV;EEuCJ;IAMI;IACA;IACA,QD2CY;IC1CZ,kBDjCI;ICkCJ;;;AAGF;EACE;;AFrDA;EEoDF;IAII;;;;AAKN;AAAA;AAAA;EAGE;;AFhEE;EE6DJ;AAAA;AAAA;IAMI,ODiBQ;;;;ACbZ;EACE;;AAEA;EACE;;AF3EA;EEuEJ;IAQI;IACA,aDVG;ICWH,gBDfG;ICgBH;IACA;;;;AAIJ;EACE;EACA,YDCc;ECAd;;AF1FE;EEuFJ;IAMI,QDHY;ICIZ,YDJY;ICKZ;;;;AAIJ;EFxFE,eCuDK;EDtDL,cCsDK;ECoCL;EACA;EACA;EACA;EACA,aDzCK;EC0CL,gBD1CK;EC2CL,ODxFY;EFOZ;;AC3BE;EEmGJ;IFpFI,eCqDG;IDpDH,cCoDG;;;ADpEH;EEmGJ;IHrEI;IACA,aEpCuB;;;ADKvB;EEmGJ;IAaI,aDhDG;ICiDH,gBDjDG;;;;ACsDL;EACE;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA,SDjEK;ECkEL;;;AFpIE;EEwIF;IACE;;;AAIJ;EACE;;;AAQF;EACE;;;AASF;EACE;EACA,gBD1FM;EC2FN;;AFnKE;EEg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FJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AE3HF;EACE;EACA;EACA;EACA,QRgFM;EQ/EN,SRuEK;EQtEL;;ATME;ESZJ;IASI;IACA;IACA;IACA;IACA;;;;AAIJ;EACE;EACA;EACA,QR8DK;EQ7DL;EACA,eRmEc;EQlEd,YACE;EAEF;;ATdE;ESKJ;IAYI;IACA;IACA,WRwEmB;IQvEnB;IACA;IACA;IACA;;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA,ORhBY;EQiBZ,kBRnBM;EQoBN;EACA;EACA;EACA;EACA;;ATvCE;ES2BJ;IAeI;IACA;IACA,kBR7BI;IQ8BJ;;;AAGF;EACE;;AAEA;EACE,OR3BO;;;AQgCb;EACE;EACA;EACA;EACA,cRKK;;ADlEH;ESyDJ;IAOI,cRIG;IQHH;;;AAGF;EACE;EACA;EACA;EACA,ORxDU;;;AQ4Dd;EACE;EACA;EACA;EACA;EACA;EACA;EACA,kBRpEM;EQqEN,4BRPc;EQQd,2BRRc;EQSd,YACE;;ATvFA;ES4EJ;IAeI;IACA,ORDmB;IQEnB;;;;AAIJ;EACE;EACA,eRpCK;EQqCL;EVzFA;;ACXE;ESiGJ;IVnFI;;;ACdA;ESiGJ;IV9FE;;;ACHE;ESiGJ;IV3FI;;;;AUsGJ;EACE;EACA;;;AAGF;EACE;EACA;;AAEA;EAEE,kBX3Ha;;;AW+HjB;EACE;EACA,aR7DK;EQ8DL,gBR9DK;;ADhEH;ES2HJ;IAMI;IACA;IACA,eRnEG;IQoEH;;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;EV3IF;;ACHE;ES6IF;IVvIE;;;ACNA;ES6IF;IVlJA;;;ACKE;ES6IF;IV/IE;;;AUwJF;EACE,ORrFG;EQsFH,QRtFG;EQuFH,cRzFG;EQ0FH,ORjIS;EQkIT;;AAGF;EACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA,OR5JY;EQ6JZ;EACA;EV3LA;;ACaE;ESwKJ;IVlLI;;;;AU4LJ;EACE;EACA,aRpHK;EQqHL,gBRrHK;EQsHL,cRpHK;EQqHL,aRvHK;EQwHL,ORxKY;EQyKZ;EACA,aR9GO;EQ+GP,mBRrKY;EF3BZ;;ACKE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CE;;;AbPE;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAQR;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;ACjGF;EfDE;;ACaE;EcZJ;IfEI;;;;AeEJ;EfGE;;ACKE;EcRJ;IfMI;;;;AeFJ;EfOE;;ACHE;EcJJ;IfUI;;;;AeNJ;EfWE;;ACXE;EcAJ;IfcI;;;;AeVJ;EfeE;;ACnBE;EcIJ;IfkBI;;;;AedJ;EfmBE;;AC3BE;EcQJ;IfsBI;IACA,aEpCuB;;;;AaiB3B;EfwBE;EACA,aE1CyB;;ADKvB;EcYJ;If4BI;;;;AexBJ;Ef6BE;EACA,aEnDyB;;ADKvB;EcgBJ;IfiCI;;;;Ae7BJ;EfkCE;EACA,aE5DyB;;ADKvB;EcoBJ;IfsCI;;;;AelCJ;EfuCE;EACA,aErEyB;;ADKvB;EcwBJ;If2CI;;;;AevCJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE,abxDiB;;;Aa2DnB;EACE,ab1DyB;;;Aa6D3B;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AC/EF;EACE;EACA;EACA;;AAGE;EACE;;;ACLN;EACE;EACA;;;AAQA;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AhBlCA;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AAaN;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AhB7GA;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AC3JR;EACE;AAAA;AAAA;AAAA;AAAA;AAAA;IAME;;EAGF;IACE;IACA;IACA;;EAGF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;IACA;;;AClCJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE,OjBwBW;EiBvBX,kBjBaM;EiBZN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACpBF;EACE,kBlBoBM;;;AkBnBP;EACG;EACA;EACA,elB8EY;EkB7EZ;EACA;;AAEA;EACI,OlBoCK;EkBnCL;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlB0BO;EkBzBP;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBmDY;EkBlDZ;EACA;;AACA;EACE;EACA;EACA,OlBQO;EkBPP;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACI;EACA;EACA,elBOY;EkBNZ;EACA;;AAEA;EACI,OlB/BE;EkBgCF;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlBzCI;EkB0CJ;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBpBY;EkBqBZ;EACA;;AACA;EACE;EACA;EACA,OlB3DI;EkB4DJ;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACI;EACA;EACA,elBhEY;EkBiEZ;EACA;;AAEA;EACI,OC7JM;ED8JN;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OCvKQ;EDwKR;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elB3FY;EkB4FZ;EACA;;AACA;EACE;EACA;EACA,OCzLQ;ED0LR;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE","sourcesContent":["// Generated with OneLightJekyll applied to Atom's One Light theme\n\n.highlight,\npre.highlight {\n background: #f9f9f9;\n color: #383942;\n}\n.highlight pre {\n background: #f9f9f9;\n}\n.highlight .hll {\n background: #f9f9f9;\n}\n.highlight .c {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .err {\n color: #fff;\n background-color: #e05151;\n}\n.highlight .k {\n color: #a625a4;\n}\n.highlight .l {\n color: #50a04f;\n}\n.highlight .n {\n color: #383942;\n}\n.highlight .o {\n color: #383942;\n}\n.highlight .p {\n color: #383942;\n}\n.highlight .cm {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .cp {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .c1 {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .cs {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .ge {\n font-style: italic;\n}\n.highlight .gs {\n font-weight: 700;\n}\n.highlight .kc {\n color: #a625a4;\n}\n.highlight .kd {\n color: #a625a4;\n}\n.highlight .kn {\n color: #a625a4;\n}\n.highlight .kp {\n color: #a625a4;\n}\n.highlight .kr {\n color: #a625a4;\n}\n.highlight .kt {\n color: #a625a4;\n}\n.highlight .ld {\n color: #50a04f;\n}\n.highlight .m {\n color: #b66a00;\n}\n.highlight .s {\n color: #50a04f;\n}\n.highlight .na {\n color: #b66a00;\n}\n.highlight .nb {\n color: #ca7601;\n}\n.highlight .nc {\n color: #ca7601;\n}\n.highlight .no {\n color: #ca7601;\n}\n.highlight .nd {\n color: #ca7601;\n}\n.highlight .ni {\n color: #ca7601;\n}\n.highlight .ne {\n color: #ca7601;\n}\n.highlight .nf {\n color: #383942;\n}\n.highlight .nl {\n color: #ca7601;\n}\n.highlight .nn {\n color: #383942;\n}\n.highlight .nx {\n color: #383942;\n}\n.highlight .py {\n color: #ca7601;\n}\n.highlight .nt {\n color: #e35549;\n}\n.highlight .nv {\n color: #ca7601;\n}\n.highlight .ow {\n font-weight: 700;\n}\n.highlight .w {\n color: #f8f8f2;\n}\n.highlight .mf {\n color: #b66a00;\n}\n.highlight .mh {\n color: #b66a00;\n}\n.highlight .mi {\n color: #b66a00;\n}\n.highlight .mo {\n color: #b66a00;\n}\n.highlight .sb {\n color: #50a04f;\n}\n.highlight .sc {\n color: #50a04f;\n}\n.highlight .sd {\n color: #50a04f;\n}\n.highlight .s2 {\n color: #50a04f;\n}\n.highlight .se {\n color: #50a04f;\n}\n.highlight .sh {\n color: #50a04f;\n}\n.highlight .si {\n color: #50a04f;\n}\n.highlight .sx {\n color: #50a04f;\n}\n.highlight .sr {\n color: #0083bb;\n}\n.highlight .s1 {\n color: #50a04f;\n}\n.highlight .ss {\n color: #0083bb;\n}\n.highlight .bp {\n color: #ca7601;\n}\n.highlight .vc {\n color: #ca7601;\n}\n.highlight .vg {\n color: #ca7601;\n}\n.highlight .vi {\n color: #e35549;\n}\n.highlight .il {\n color: #b66a00;\n}\n.highlight .gu {\n color: #75715e;\n}\n.highlight .gd {\n color: #e05151;\n}\n.highlight .gi {\n color: #43d089;\n}\n.highlight .language-json .w + .s2 {\n color: #e35549;\n}\n.highlight .language-json .kc {\n color: #0083bb;\n}\n","/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput {\n /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect {\n /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// Base element style overrides\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\n:root {\n color-scheme: $color-scheme;\n}\n\n* {\n box-sizing: border-box;\n}\n\nhtml {\n @include fs-4;\n\n scroll-behavior: smooth;\n}\n\nbody {\n font-family: $body-font-family;\n font-size: inherit;\n line-height: $body-line-height;\n color: $body-text-color;\n background-color: $body-background-color;\n overflow-wrap: break-word;\n}\n\nol,\nul,\ndl,\npre,\naddress,\nblockquote,\ntable,\ndiv,\nhr,\nform,\nfieldset,\nnoscript .table-wrapper {\n margin-top: 0;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n#toctitle {\n margin-top: 0;\n margin-bottom: 1em;\n font-weight: 500;\n line-height: $body-heading-line-height;\n color: $body-heading-color;\n}\n\np {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n\na {\n color: $link-color;\n text-decoration: none;\n}\n\na:not([class]) {\n text-decoration: underline;\n text-decoration-color: $border-color;\n text-underline-offset: 2px;\n\n &:hover {\n text-decoration-color: rgba($link-color, 0.45);\n }\n}\n\ncode {\n font-family: $mono-font-family;\n font-size: 0.75em;\n line-height: $body-line-height;\n}\n\nfigure,\npre {\n margin: 0;\n}\n\nli {\n margin: 0.25em 0;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\nhr {\n height: 1px;\n padding: 0;\n margin: $sp-6 0;\n background-color: $border-color;\n border: 0;\n}\n\n// adds a GitHub-style sidebar to blockquotes\nblockquote {\n margin: 10px 0;\n\n // resets user-agent stylesheets for blockquotes\n margin-block-start: 0;\n margin-inline-start: 0;\n padding-left: 1rem;\n border-left: 3px solid $border-color;\n}\n","$color-scheme: light !default;\n$body-background-color: $white !default;\n$body-heading-color: $grey-dk-300 !default;\n$body-text-color: $grey-dk-100 !default;\n$link-color: $purple-000 !default;\n$nav-child-link-color: $grey-dk-100 !default;\n$sidebar-color: $grey-lt-000 !default;\n$base-button-color: #f7f7f7 !default;\n$btn-primary-color: $purple-100 !default;\n$code-background-color: $grey-lt-000 !default;\n$feedback-color: darken($sidebar-color, 3%) !default;\n$table-background-color: $white !default;\n$search-background-color: $white !default;\n$search-result-preview-color: $grey-dk-000 !default;\n\n@import \"./vendor/OneLightJekyll/syntax\";\n","@mixin fs-1 {\n font-size: $font-size-1 !important;\n\n @include mq(sm) {\n font-size: $font-size-1-sm !important;\n }\n}\n\n@mixin fs-2 {\n font-size: $font-size-2 !important;\n\n @include mq(sm) {\n font-size: $font-size-3 !important;\n }\n}\n\n@mixin fs-3 {\n font-size: $font-size-3 !important;\n\n @include mq(sm) {\n font-size: $font-size-4 !important;\n }\n}\n\n@mixin fs-4 {\n font-size: $font-size-4 !important;\n\n @include mq(sm) {\n font-size: $font-size-5 !important;\n }\n}\n\n@mixin fs-5 {\n font-size: $font-size-5 !important;\n\n @include mq(sm) {\n font-size: $font-size-6 !important;\n }\n}\n\n@mixin fs-6 {\n font-size: $font-size-6 !important;\n\n @include mq(sm) {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n}\n\n@mixin fs-7 {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-8 !important;\n }\n}\n\n@mixin fs-8 {\n font-size: $font-size-8 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-9 !important;\n }\n}\n\n@mixin fs-9 {\n font-size: $font-size-9 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-10 !important;\n }\n}\n\n@mixin fs-10 {\n font-size: $font-size-10 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-10-sm !important;\n }\n}\n","// Media query\n\n// Media query mixin\n// Usage:\n// @include mq(md) {\n// ..medium and up styles\n// }\n@mixin mq($name) {\n // Retrieves the value from the key\n $value: map-get($media-queries, $name);\n\n // If the key exists in the map\n @if $value {\n // Prints a media query based on the value\n @media (min-width: $value) {\n @content;\n }\n } @else {\n @warn \"No value could be retrieved from `#{$media-query}`. Please make sure it is defined in `$media-queries` map.\";\n }\n}\n\n// Responsive container\n\n@mixin container {\n padding-right: $gutter-spacing-sm;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-right: $gutter-spacing;\n padding-left: $gutter-spacing;\n }\n}\n","// Typography\n\n// prettier-ignore\n$body-font-family: system-ui, -apple-system, blinkmacsystemfont, \"Segoe UI\",\n roboto, \"Helvetica Neue\", arial, sans-serif, \"Segoe UI Emoji\" !default;\n$mono-font-family: \"SFMono-Regular\", menlo, consolas, monospace !default;\n$root-font-size: 16px !default; // DEPRECATED: previously base font-size for rems\n$body-line-height: 1.4 !default;\n$content-line-height: 1.6 !default;\n$body-heading-line-height: 1.25 !default;\n\n// Font size\n// `-sm` suffix is the size at the small (and above) media query\n\n$font-size-1: 0.5625rem !default;\n$font-size-1-sm: 0.625rem !default;\n$font-size-2: 0.6875rem !default; // h4 - uppercased!, h6 not uppercased, text-small\n$font-size-3: 0.75rem !default; // h5\n$font-size-4: 0.875rem !default;\n$font-size-5: 1rem !default; // h3\n$font-size-6: 1.125rem !default; // h2\n$font-size-7: 1.5rem !default;\n$font-size-8: 2rem !default; // h1\n$font-size-9: 2.25rem !default;\n$font-size-10: 2.625rem !default;\n$font-size-10-sm: 3rem !default;\n\n// Colors\n\n$white: #fff !default;\n$grey-dk-000: #959396 !default;\n$grey-dk-100: #5c5962 !default;\n$grey-dk-200: #44434d !default;\n$grey-dk-250: #302d36 !default;\n$grey-dk-300: #27262b !default;\n$grey-lt-000: #f5f6fa !default;\n$grey-lt-100: #eeebee !default;\n$grey-lt-200: #ecebed !default;\n$grey-lt-300: #e6e1e8 !default;\n$purple-000: #7253ed !default;\n$purple-100: #5e41d0 !default;\n$purple-200: #4e26af !default;\n$purple-300: #381885 !default;\n$blue-000: #2c84fa !default;\n$blue-100: #2869e6 !default;\n$blue-200: #264caf !default;\n$blue-300: #183385 !default;\n$green-000: #41d693 !default;\n$green-100: #11b584 !default;\n$green-200: #009c7b !default;\n$green-300: #026e57 !default;\n$yellow-000: #ffeb82 !default;\n$yellow-100: #fadf50 !default;\n$yellow-200: #f7d12e !default;\n$yellow-300: #e7af06 !default;\n$red-000: #f77e7e !default;\n$red-100: #f96e65 !default;\n$red-200: #e94c4c !default;\n$red-300: #dd2e2e !default;\n\n// Spacing\n\n$spacing-unit: 1rem; // 1rem == 16px\n\n$spacers: (\n sp-0: 0,\n sp-1: $spacing-unit * 0.25,\n sp-2: $spacing-unit * 0.5,\n sp-3: $spacing-unit * 0.75,\n sp-4: $spacing-unit,\n sp-5: $spacing-unit * 1.5,\n sp-6: $spacing-unit * 2,\n sp-7: $spacing-unit * 2.5,\n sp-8: $spacing-unit * 3,\n sp-9: $spacing-unit * 3.5,\n sp-10: $spacing-unit * 4,\n) !default;\n$sp-1: map-get($spacers, sp-1) !default; // 0.25 rem == 4px\n$sp-2: map-get($spacers, sp-2) !default; // 0.5 rem == 8px\n$sp-3: map-get($spacers, sp-3) !default; // 0.75 rem == 12px\n$sp-4: map-get($spacers, sp-4) !default; // 1 rem == 16px\n$sp-5: map-get($spacers, sp-5) !default; // 1.5 rem == 24px\n$sp-6: map-get($spacers, sp-6) !default; // 2 rem == 32px\n$sp-7: map-get($spacers, sp-7) !default; // 2.5 rem == 40px\n$sp-8: map-get($spacers, sp-8) !default; // 3 rem == 48px\n$sp-9: map-get($spacers, sp-9) !default; // 3.5 rem == 56px\n$sp-10: map-get($spacers, sp-10) !default; // 4 rem == 64px\n\n// Borders\n\n$border: 1px solid !default;\n$border-radius: 4px !default;\n$border-color: $grey-lt-100 !default;\n\n// Grid system\n\n$gutter-spacing: $sp-6 !default;\n$gutter-spacing-sm: $sp-4 !default;\n$nav-width: 16.5rem !default;\n$nav-width-md: 15.5rem !default;\n$nav-list-item-height: $sp-6 !default;\n$nav-list-item-height-sm: $sp-8 !default;\n$nav-list-expander-right: true;\n$content-width: 50rem !default;\n$header-height: 3.75rem !default;\n$search-results-width: $content-width - $nav-width !default;\n$transition-duration: 400ms;\n\n// Media queries in pixels\n\n$media-queries: (\n xs: 20rem,\n sm: 31.25rem,\n md: $content-width,\n lg: $content-width + $nav-width,\n xl: 87.5rem,\n) !default;\n","// The basic two column layout\n\n.side-bar {\n z-index: 0;\n display: flex;\n flex-wrap: wrap;\n background-color: $sidebar-color;\n\n @include mq(md) {\n flex-flow: column nowrap;\n position: fixed;\n width: $nav-width-md;\n height: 100%;\n border-right: $border $border-color;\n align-items: flex-end;\n }\n\n @include mq(lg) {\n width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});\n min-width: $nav-width;\n }\n}\n\n.main {\n @include mq(md) {\n position: relative;\n max-width: $content-width;\n margin-left: $nav-width-md;\n }\n\n @include mq(lg) {\n // stylelint-disable function-name-case\n // disable for Max(), we want to use the CSS max() function\n margin-left: Max(\n #{$nav-width},\n calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width})\n );\n // stylelint-enable function-name-case\n }\n}\n\n.main-content-wrap {\n @include container;\n\n padding-top: $gutter-spacing-sm;\n padding-bottom: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-top: $gutter-spacing;\n padding-bottom: $gutter-spacing;\n }\n}\n\n.main-header {\n z-index: 0;\n display: none;\n background-color: $sidebar-color;\n\n @include mq(md) {\n display: flex;\n justify-content: space-between;\n height: $header-height;\n background-color: $body-background-color;\n border-bottom: $border $border-color;\n }\n\n &.nav-open {\n display: block;\n\n @include mq(md) {\n display: flex;\n }\n }\n}\n\n.site-nav,\n.site-header,\n.site-footer {\n width: 100%;\n\n @include mq(lg) {\n width: $nav-width;\n }\n}\n\n.site-nav {\n display: none;\n\n &.nav-open {\n display: block;\n }\n\n @include mq(md) {\n display: block;\n padding-top: $sp-8;\n padding-bottom: $gutter-spacing-sm;\n overflow-y: auto;\n flex: 1 1 auto;\n }\n}\n\n.site-header {\n display: flex;\n min-height: $header-height;\n align-items: center;\n\n @include mq(md) {\n height: $header-height;\n max-height: $header-height;\n border-bottom: $border $border-color;\n }\n}\n\n.site-title {\n @include container;\n\n flex-grow: 1;\n display: flex;\n height: 100%;\n align-items: center;\n padding-top: $sp-3;\n padding-bottom: $sp-3;\n color: $body-heading-color;\n @include fs-6;\n\n @include mq(md) {\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n }\n}\n\n@if variable-exists(logo) {\n .site-logo {\n width: 100%;\n height: 100%;\n background-image: url($logo);\n background-repeat: no-repeat;\n background-position: left center;\n background-size: contain;\n }\n}\n\n.site-button {\n display: flex;\n height: 100%;\n padding: $gutter-spacing-sm;\n align-items: center;\n}\n\n@include mq(md) {\n .site-header .site-button {\n display: none;\n }\n}\n\n.site-title:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n}\n\n.site-button:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n}\n\n// stylelint-disable selector-max-type\n\nbody {\n position: relative;\n padding-bottom: $sp-10;\n overflow-y: scroll;\n\n @include mq(md) {\n position: static;\n padding-bottom: 0;\n }\n}\n\n// stylelint-enable selector-max-type\n\n.site-footer {\n @include container;\n\n position: absolute;\n bottom: 0;\n left: 0;\n padding-top: $sp-4;\n padding-bottom: $sp-4;\n color: $grey-dk-000;\n @include fs-2;\n\n @include mq(md) {\n position: static;\n justify-self: end;\n }\n}\n\n.icon {\n width: $sp-5;\n height: $sp-5;\n color: $link-color;\n}\n","@charset \"UTF-8\";\n\n// Styles for rendered markdown in the .main-content container\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity, selector-max-id\n\n.main-content {\n line-height: $content-line-height;\n\n ol,\n ul,\n dl,\n pre,\n address,\n blockquote,\n .table-wrapper {\n margin-top: 0.5em;\n }\n\n a {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n ul,\n ol {\n padding-left: 1.5em;\n }\n\n li {\n .highlight {\n margin-top: $sp-1;\n }\n }\n\n ol {\n list-style-type: none;\n counter-reset: step-counter;\n\n > li {\n position: relative;\n\n &::before {\n position: absolute;\n top: 0.2em;\n left: -1.6em;\n color: $grey-dk-000;\n content: counter(step-counter);\n counter-increment: step-counter;\n @include fs-3;\n\n @include mq(sm) {\n top: 0.11em;\n }\n }\n\n ol {\n counter-reset: sub-counter;\n\n > li {\n &::before {\n content: counter(sub-counter, lower-alpha);\n counter-increment: sub-counter;\n }\n }\n }\n }\n }\n\n ul {\n list-style: none;\n\n > li {\n &::before {\n position: absolute;\n margin-left: -1.4em;\n color: $grey-dk-000;\n content: \"•\";\n }\n }\n }\n\n .task-list-item {\n &::before {\n content: \"\";\n }\n }\n\n .task-list-item-checkbox {\n margin-right: 0.6em;\n margin-left: -1.4em;\n\n // The same margin-left is used above for ul > li::before\n }\n\n hr + * {\n margin-top: 0;\n }\n\n h1:first-of-type {\n margin-top: 0.5em;\n }\n\n dl {\n display: grid;\n grid-template: auto / 10em 1fr;\n }\n\n dt,\n dd {\n margin: 0.25em 0;\n }\n\n dt {\n grid-column: 1;\n font-weight: 500;\n text-align: right;\n\n &::after {\n content: \":\";\n }\n }\n\n dd {\n grid-column: 2;\n margin-bottom: 0;\n margin-left: 1em;\n\n blockquote,\n div,\n dl,\n dt,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n li,\n ol,\n p,\n pre,\n table,\n ul,\n .table-wrapper {\n &:first-child {\n margin-top: 0;\n }\n }\n }\n\n dd,\n ol,\n ul {\n dl:first-child {\n dt:first-child,\n dd:nth-child(2) {\n margin-top: 0;\n }\n }\n }\n\n .anchor-heading {\n position: absolute;\n right: -$sp-4;\n width: $sp-5;\n height: 100%;\n padding-right: $sp-1;\n padding-left: $sp-1;\n overflow: visible;\n\n @include mq(md) {\n right: auto;\n left: -$sp-5;\n }\n\n svg {\n display: inline-block;\n width: 100%;\n height: 100%;\n color: $link-color;\n visibility: hidden;\n }\n }\n\n .anchor-heading:hover,\n .anchor-heading:focus,\n h1:hover > .anchor-heading,\n h2:hover > .anchor-heading,\n h3:hover > .anchor-heading,\n h4:hover > .anchor-heading,\n h5:hover > .anchor-heading,\n h6:hover > .anchor-heading {\n svg {\n visibility: visible;\n }\n }\n\n summary {\n cursor: pointer;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n #toctitle {\n position: relative;\n margin-top: 1.5em;\n margin-bottom: 0.25em;\n\n + table,\n + .table-wrapper,\n + .code-example,\n + .highlighter-rouge,\n + .sectionbody .listingblock {\n margin-top: 1em;\n }\n\n + p:not(.label) {\n margin-top: 0;\n }\n }\n\n > h1:first-child,\n > h2:first-child,\n > h3:first-child,\n > h4:first-child,\n > h5:first-child,\n > h6:first-child,\n > .sect1:first-child > h2,\n > .sect2:first-child > h3,\n > .sect3:first-child > h4,\n > .sect4:first-child > h5,\n > .sect5:first-child > h6 {\n margin-top: $sp-2;\n }\n}\n","// Main nav, breadcrumb, etc...\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity\n\n.nav-list {\n padding: 0;\n margin-top: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-list-item {\n @include fs-4;\n\n position: relative;\n margin: 0;\n\n @include mq(md) {\n @include fs-3;\n }\n\n .nav-list-link {\n display: block;\n min-height: $nav-list-item-height-sm;\n padding-top: $sp-1;\n padding-bottom: $sp-1;\n line-height: #{$nav-list-item-height-sm - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height-sm;\n padding-left: $gutter-spacing-sm;\n } @else {\n padding-right: $gutter-spacing-sm;\n padding-left: $nav-list-item-height-sm;\n }\n\n @include mq(md) {\n min-height: $nav-list-item-height;\n line-height: #{$nav-list-item-height - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height;\n padding-left: $gutter-spacing;\n } @else {\n padding-right: $gutter-spacing;\n padding-left: $nav-list-item-height;\n }\n }\n\n &.external > svg {\n width: $sp-4;\n height: $sp-4;\n vertical-align: text-bottom;\n }\n\n &.active {\n font-weight: 600;\n text-decoration: none;\n }\n\n &:hover,\n &.active {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n }\n }\n\n .nav-list-expander {\n position: absolute;\n @if $nav-list-expander-right {\n right: 0;\n }\n\n width: $nav-list-item-height-sm;\n height: $nav-list-item-height-sm;\n padding: #{$nav-list-item-height-sm * 0.25};\n color: $link-color;\n\n @include mq(md) {\n width: $nav-list-item-height;\n height: $nav-list-item-height;\n padding: #{$nav-list-item-height * 0.25};\n }\n\n &:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n }\n\n @if $nav-list-expander-right {\n svg {\n transform: rotate(90deg);\n }\n }\n }\n\n > .nav-list {\n display: none;\n padding-left: $sp-3;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n\n .nav-list-link {\n color: $nav-child-link-color;\n }\n\n .nav-list-expander {\n color: $nav-child-link-color;\n }\n }\n }\n\n &.active {\n > .nav-list-expander svg {\n @if $nav-list-expander-right {\n transform: rotate(-90deg);\n } @else {\n transform: rotate(90deg);\n }\n }\n\n > .nav-list {\n display: block;\n }\n }\n }\n}\n\n.nav-category {\n padding: $sp-2 $gutter-spacing-sm;\n font-weight: 600;\n text-align: start;\n text-transform: uppercase;\n border-bottom: $border $border-color;\n @include fs-2;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing;\n margin-top: $gutter-spacing-sm;\n text-align: start;\n\n &:first-child {\n margin-top: 0;\n }\n }\n}\n\n.nav-list.nav-category-list {\n > .nav-list-item {\n margin: 0;\n\n > .nav-list {\n padding: 0;\n\n > .nav-list-item {\n > .nav-list-link {\n color: $link-color;\n }\n\n > .nav-list-expander {\n color: $link-color;\n }\n }\n }\n }\n}\n\n// Aux nav\n\n.aux-nav {\n height: 100%;\n overflow-x: auto;\n @include fs-2;\n\n .aux-nav-list {\n display: flex;\n height: 100%;\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n .aux-nav-list-item {\n display: inline-block;\n height: 100%;\n padding: 0;\n margin: 0;\n }\n\n @include mq(md) {\n padding-right: $gutter-spacing-sm;\n }\n}\n\n// Breadcrumb nav\n\n.breadcrumb-nav {\n @include mq(md) {\n margin-top: -$sp-4;\n }\n}\n\n.breadcrumb-nav-list {\n padding-left: 0;\n margin-bottom: $sp-3;\n list-style: none;\n}\n\n.breadcrumb-nav-list-item {\n display: table-cell;\n @include fs-2;\n\n &::before {\n display: none;\n }\n\n &::after {\n display: inline-block;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $grey-dk-000;\n content: \"/\";\n }\n\n &:last-child {\n &::after {\n content: \"\";\n }\n }\n}\n","// Typography\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\nh1,\n.text-alpha {\n @include fs-8;\n\n font-weight: 300;\n}\n\nh2,\n.text-beta,\n#toctitle {\n @include fs-6;\n}\n\nh3,\n.text-gamma {\n @include fs-5;\n}\n\nh4,\n.text-delta {\n @include fs-2;\n\n font-weight: 400;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n}\n\nh4 code {\n text-transform: none;\n}\n\nh5,\n.text-epsilon {\n @include fs-3;\n}\n\nh6,\n.text-zeta {\n @include fs-2;\n}\n\n.text-small {\n @include fs-2;\n}\n\n.text-mono {\n font-family: $mono-font-family !important;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n","// Labels (not the form kind)\n\n// this :not() prevents a style clash with Mermaid.js's\n// diagram labels, which also use .label\n// for more, see https://github.com/just-the-docs/just-the-docs/issues/1272\n// and the accompanying PR\n.label:not(g),\n.label-blue:not(g) {\n display: inline-block;\n padding: 0.16em 0.56em;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $white;\n text-transform: uppercase;\n vertical-align: middle;\n background-color: $blue-100;\n @include fs-2;\n\n border-radius: 12px;\n}\n\n.label-green:not(g) {\n background-color: $green-200;\n}\n\n.label-purple:not(g) {\n background-color: $purple-100;\n}\n\n.label-red:not(g) {\n background-color: $red-200;\n}\n\n.label-yellow:not(g) {\n color: $grey-dk-200;\n background-color: $yellow-200;\n}\n","// Buttons and things that look like buttons\n// stylelint-disable color-named\n\n.btn {\n display: inline-block;\n box-sizing: border-box;\n padding: 0.3em 1em;\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n line-height: 1.5;\n color: $link-color;\n text-decoration: none;\n vertical-align: baseline;\n cursor: pointer;\n background-color: $base-button-color;\n border-width: 0;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n appearance: none;\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: darken($link-color, 2%);\n }\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n text-decoration: none;\n background-color: darken($base-button-color, 1%);\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($base-button-color, 3%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken(#dcdcdc, 5%);\n }\n\n &:disabled,\n &.disabled {\n &,\n &:hover {\n color: rgba(102, 102, 102, 0.5);\n cursor: default;\n background-color: rgba(229, 229, 229, 0.5);\n background-image: none;\n box-shadow: none;\n }\n }\n}\n\n.btn-outline {\n color: $link-color;\n background: transparent;\n box-shadow: inset 0 0 0 2px $grey-lt-300;\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n color: darken($link-color, 4%);\n text-decoration: none;\n background-color: transparent;\n box-shadow: inset 0 0 0 3px $grey-lt-300;\n }\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow:\n inset 0 0 0 2px $grey-dk-100,\n 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: inset 0 0 0 2px $grey-dk-100;\n }\n}\n\n.btn-primary {\n @include btn-color($white, $btn-primary-color);\n}\n\n.btn-purple {\n @include btn-color($white, $purple-100);\n}\n\n.btn-blue {\n @include btn-color($white, $blue-000);\n}\n\n.btn-green {\n @include btn-color($white, $green-100);\n}\n\n.btn-reset {\n background: none;\n border: none;\n margin: 0;\n text-align: inherit;\n font: inherit;\n border-radius: 0;\n appearance: none;\n}\n","// Colored button\n\n@mixin btn-color($fg, $bg) {\n color: $fg;\n background-color: darken($bg, 2%);\n background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%));\n box-shadow:\n 0 1px 3px rgba(0, 0, 0, 0.25),\n 0 4px 10px rgba(0, 0, 0, 0.12);\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: $fg;\n background-color: darken($bg, 4%);\n background-image: linear-gradient((lighten($bg, 2%), darken($bg, 4%)));\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($bg, 5%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken($bg, 10%);\n }\n}\n","// Search input and autocomplete\n\n.search {\n position: relative;\n z-index: 2;\n flex-grow: 1;\n height: $sp-10;\n padding: $sp-2;\n transition: padding linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: relative !important;\n width: auto !important;\n height: 100% !important;\n padding: 0;\n transition: none;\n }\n}\n\n.search-input-wrap {\n position: relative;\n z-index: 1;\n height: $sp-8;\n overflow: hidden;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n transition: height linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: absolute;\n width: 100%;\n max-width: $search-results-width;\n height: 100% !important;\n border-radius: 0;\n box-shadow: none;\n transition: width ease $transition-duration;\n }\n}\n\n.search-input {\n position: absolute;\n width: 100%;\n height: 100%;\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing-sm + $sp-5};\n font-size: 1rem;\n color: $body-text-color;\n background-color: $search-background-color;\n border-top: 0;\n border-right: 0;\n border-bottom: 0;\n border-left: 0;\n border-radius: 0;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing + $sp-5};\n font-size: 0.875rem;\n background-color: $body-background-color;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n &:focus {\n outline: 0;\n\n + .search-label .search-icon {\n color: $link-color;\n }\n }\n}\n\n.search-label {\n position: absolute;\n display: flex;\n height: 100%;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-left: $gutter-spacing;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n .search-icon {\n width: #{$sp-4 * 1.2};\n height: #{$sp-4 * 1.2};\n align-self: center;\n color: $grey-dk-000;\n }\n}\n\n.search-results {\n position: absolute;\n left: 0;\n display: none;\n width: 100%;\n max-height: calc(100% - #{$sp-10});\n overflow-y: auto;\n background-color: $search-background-color;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n\n @include mq(md) {\n top: 100%;\n width: $search-results-width;\n max-height: calc(100vh - 200%) !important;\n }\n}\n\n.search-results-list {\n padding-left: 0;\n margin-bottom: $sp-1;\n list-style: none;\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n}\n\n.search-results-list-item {\n padding: 0;\n margin: 0;\n}\n\n.search-result {\n display: block;\n padding: $sp-1 $sp-3;\n\n &:hover,\n &.active {\n background-color: $feedback-color;\n }\n}\n\n.search-result-title {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 40%;\n padding-right: $sp-2;\n vertical-align: top;\n }\n}\n\n.search-result-doc {\n display: flex;\n align-items: center;\n word-wrap: break-word;\n\n &.search-result-doc-parent {\n opacity: 0.5;\n @include fs-3;\n\n @include mq(md) {\n @include fs-2;\n }\n }\n\n .search-result-icon {\n width: $sp-4;\n height: $sp-4;\n margin-right: $sp-2;\n color: $link-color;\n flex-shrink: 0;\n }\n\n .search-result-doc-title {\n overflow: auto;\n }\n}\n\n.search-result-section {\n margin-left: #{$sp-4 + $sp-2};\n word-wrap: break-word;\n}\n\n.search-result-rel-url {\n display: block;\n margin-left: #{$sp-4 + $sp-2};\n overflow: hidden;\n color: $search-result-preview-color;\n text-overflow: ellipsis;\n white-space: nowrap;\n @include fs-1;\n}\n\n.search-result-previews {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n padding-left: $sp-4;\n margin-left: $sp-2;\n color: $search-result-preview-color;\n word-wrap: break-word;\n border-left: $border;\n border-left-color: $border-color;\n @include fs-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 60%;\n padding-left: $sp-2;\n margin-left: 0;\n vertical-align: top;\n }\n}\n\n.search-result-preview + .search-result-preview {\n margin-top: $sp-1;\n}\n\n.search-result-highlight {\n font-weight: bold;\n}\n\n.search-no-result {\n padding: $sp-2 $sp-3;\n @include fs-3;\n}\n\n.search-button {\n position: fixed;\n right: $sp-4;\n bottom: $sp-4;\n display: flex;\n width: $sp-9;\n height: $sp-9;\n background-color: $search-background-color;\n border: 1px solid rgba($link-color, 0.3);\n border-radius: #{$sp-9 * 0.5};\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n align-items: center;\n justify-content: center;\n}\n\n.search-overlay {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1;\n width: 0;\n height: 0;\n background-color: rgba(0, 0, 0, 0.3);\n opacity: 0;\n transition:\n opacity ease $transition-duration,\n width 0s $transition-duration,\n height 0s $transition-duration;\n}\n\n.search-active {\n .search {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .search-input-wrap {\n height: $sp-10;\n border-radius: 0;\n\n @include mq(md) {\n width: $search-results-width;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n }\n }\n\n .search-input {\n background-color: $search-background-color;\n\n @include mq(md) {\n padding-left: 2.3rem;\n }\n }\n\n .search-label {\n @include mq(md) {\n padding-left: 0.6rem;\n }\n }\n\n .search-results {\n display: block;\n }\n\n .search-overlay {\n width: 100%;\n height: 100%;\n opacity: 1;\n transition:\n opacity ease $transition-duration,\n width 0s,\n height 0s;\n }\n\n @include mq(md) {\n .main {\n position: fixed;\n right: 0;\n left: 0;\n }\n }\n\n .main-header {\n padding-top: $sp-10;\n\n @include mq(md) {\n padding-top: 0;\n }\n }\n}\n","// Tables\n// stylelint-disable max-nesting-depth, selector-no-type, selector-max-type\n\n.table-wrapper {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: $sp-5;\n overflow-x: auto;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n}\n\ntable {\n display: table;\n min-width: 100%;\n border-collapse: separate;\n}\n\nth,\ntd {\n @include fs-3;\n\n min-width: 7.5rem;\n padding: $sp-2 $sp-3;\n background-color: $table-background-color;\n border-bottom: $border rgba($border-color, 0.5);\n border-left: $border $border-color;\n\n &:first-of-type {\n border-left: 0;\n }\n}\n\ntbody {\n tr {\n &:last-of-type {\n th,\n td {\n border-bottom: 0;\n }\n\n td {\n padding-bottom: $sp-3;\n }\n }\n }\n}\n\nthead {\n th {\n border-bottom: $border $border-color;\n }\n}\n","// Code and syntax highlighting\n// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type, scss/comment-no-empty\n\n// {% raw %}\n\n// This instruction applies to all queues not within 'pre' or 'figure', avoiding 'code' generated by the highlight.\n:not(pre, figure) {\n & > code {\n padding: 0.2em 0.15em;\n font-weight: 400;\n background-color: $code-background-color;\n border: $border $border-color;\n border-radius: $border-radius;\n }\n}\n\n// Avoid appearance of dark border around visited code links in Safari\na:visited code {\n border-color: $border-color;\n}\n\n// Content structure for highlighted code blocks using fences or Liquid\n//\n// ```[LANG]...```, no kramdown line_numbers:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n//\n// ```[LANG]...```, kramdown line_numbers = true:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.rouge-gutter.gl > pre.lineno\n// | td.rouge-code > pre\n//\n// {% highlight LANG %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n//\n// {% highlight LANG linenos %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.gutter.gl > pre.lineno\n// | td.code > pre\n//\n// ----...---- (AsciiDoc)\n// div.listingblock > div.content > pre.rouge.highlight\n//\n// fix_linenos removes the outermost pre when it encloses table.rouge-table\n//\n// See docs/index-test.md for some tests.\n//\n// No kramdown line_numbers: fences and Liquid highlighting look the same.\n// Kramdown line_numbers = true: fences have a wider gutter than with Liquid?\n\n// ```[LANG]...```\n// or in AsciiDoc:\n//\n// ----\n// ...\n// ----\n\n// the code may appear with 3 different types:\n// container \\ case: default case, code with line number, code with html rendering\n// top level: div.highlighter-rouge, figure.highlight, figure.highlight\n// second level: div.highlight, div.table-wrapper, pre.highlight\n// third level: pre.highlight, td.code, absent\n// last level: code, pre, code (optionality)\n// highlighter level: span, span, span\n// the spacing are only in the second level for case 1, 3 and in the third level for case 2\n// in AsciiDoc, there is a parent container that contains optionally a title and the content.\n\n// select top level container\ndiv.highlighter-rouge,\ndiv.listingblock > div.content,\nfigure.highlight {\n margin-top: 0;\n margin-bottom: $sp-3;\n background-color: $code-background-color;\n border-radius: $border-radius;\n box-shadow: none;\n -webkit-overflow-scrolling: touch;\n position: relative;\n padding: 0;\n\n // copy button (or other button)\n // the button appear only when there is a hover on the code or focus on button\n > button {\n width: $sp-3;\n opacity: 0;\n position: absolute;\n top: 0;\n right: 0;\n border: $sp-3 solid $code-background-color;\n background-color: $code-background-color;\n color: $body-text-color;\n box-sizing: content-box;\n\n svg {\n fill: $body-text-color;\n }\n\n &:active {\n text-decoration: none;\n outline: none;\n opacity: 1;\n }\n\n &:focus {\n opacity: 1;\n }\n }\n\n // the button can be seen by doing a simple hover in the code, there is no need to go over the location of the button\n &:hover {\n > button {\n cursor: copy;\n opacity: 1;\n }\n }\n}\n\n// setting the spacing and scrollbar on the second level for the first case\n// remove all space on the second and third level\n// this is a mixin to accommodate for the slightly different structures generated via Markdown vs AsciiDoc\n@mixin scroll-and-spacing($code-div, $pre-select) {\n #{$code-div} {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 0;\n }\n\n #{$pre-select},\n code {\n padding: 0;\n margin: 0;\n border: 0;\n }\n}\n\n// for Markdown\ndiv.highlighter-rouge {\n @include scroll-and-spacing(\"div.highlight\", \"pre.highlight\");\n}\n\n// for AsciiDoc. we also need to fix the margins for its parent container.\ndiv.listingblock {\n @include scroll-and-spacing(\"div.content\", \"div.content > pre\");\n\n margin-top: 0;\n margin-bottom: $sp-3;\n}\n\n// {% highlight LANG %}...{% endhighlight %},\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the second level for the thirt case\n// the css rule are apply only to the last code enviroment\n// setting the scroolbar\nfigure.highlight {\n pre,\n :not(pre) > code {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 0;\n }\n}\n\n// ```[LANG]...```, kramdown line_numbers = true,\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the thirt level for the second case\n.highlight .table-wrapper {\n padding: $sp-3 0;\n margin: 0;\n border: 0;\n box-shadow: none;\n\n td,\n pre {\n @include fs-2;\n\n min-width: 0;\n padding: 0;\n background-color: $code-background-color;\n border: 0;\n }\n\n td.gl {\n width: 1em;\n padding-right: $sp-3;\n padding-left: $sp-3;\n }\n\n pre {\n margin: 0;\n line-height: 2;\n }\n}\n\n// Code examples: html render of a code\n.code-example,\n.listingblock > .title {\n padding: $sp-3;\n margin-bottom: $sp-3;\n overflow: auto;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n\n + .highlighter-rouge,\n + .sectionbody .listingblock,\n + .content,\n + figure.highlight {\n position: relative;\n margin-top: -$sp-4;\n border-right: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n border-left: 1px solid $border-color;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n\n// Mermaid diagram code blocks should be left unstyled.\ncode.language-mermaid {\n padding: 0;\n background-color: inherit;\n border: 0;\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight,\npre.highlight {\n background: $code-background-color; // Code Background\n // For Backwards Compatibility Before $code-linenumber-color was added\n @if variable-exists(code-linenumber-color) {\n color: $code-linenumber-color; // Code Line Numbers\n } @else {\n color: $body-text-color; // Code Line Numbers\n }\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight pre {\n background: $code-background-color; // Code Background\n}\n\n// {% endraw %}\n","// Utility classes for colors\n\n// Text colors\n\n.text-grey-dk-000 {\n color: $grey-dk-000 !important;\n}\n\n.text-grey-dk-100 {\n color: $grey-dk-100 !important;\n}\n\n.text-grey-dk-200 {\n color: $grey-dk-200 !important;\n}\n\n.text-grey-dk-250 {\n color: $grey-dk-250 !important;\n}\n\n.text-grey-dk-300 {\n color: $grey-dk-300 !important;\n}\n\n.text-grey-lt-000 {\n color: $grey-lt-000 !important;\n}\n\n.text-grey-lt-100 {\n color: $grey-lt-100 !important;\n}\n\n.text-grey-lt-200 {\n color: $grey-lt-200 !important;\n}\n\n.text-grey-lt-300 {\n color: $grey-lt-300 !important;\n}\n\n.text-blue-000 {\n color: $blue-000 !important;\n}\n\n.text-blue-100 {\n color: $blue-100 !important;\n}\n\n.text-blue-200 {\n color: $blue-200 !important;\n}\n\n.text-blue-300 {\n color: $blue-300 !important;\n}\n\n.text-green-000 {\n color: $green-000 !important;\n}\n\n.text-green-100 {\n color: $green-100 !important;\n}\n\n.text-green-200 {\n color: $green-200 !important;\n}\n\n.text-green-300 {\n color: $green-300 !important;\n}\n\n.text-purple-000 {\n color: $purple-000 !important;\n}\n\n.text-purple-100 {\n color: $purple-100 !important;\n}\n\n.text-purple-200 {\n color: $purple-200 !important;\n}\n\n.text-purple-300 {\n color: $purple-300 !important;\n}\n\n.text-yellow-000 {\n color: $yellow-000 !important;\n}\n\n.text-yellow-100 {\n color: $yellow-100 !important;\n}\n\n.text-yellow-200 {\n color: $yellow-200 !important;\n}\n\n.text-yellow-300 {\n color: $yellow-300 !important;\n}\n\n.text-red-000 {\n color: $red-000 !important;\n}\n\n.text-red-100 {\n color: $red-100 !important;\n}\n\n.text-red-200 {\n color: $red-200 !important;\n}\n\n.text-red-300 {\n color: $red-300 !important;\n}\n\n// Background colors\n\n.bg-grey-dk-000 {\n background-color: $grey-dk-000 !important;\n}\n\n.bg-grey-dk-100 {\n background-color: $grey-dk-100 !important;\n}\n\n.bg-grey-dk-200 {\n background-color: $grey-dk-200 !important;\n}\n\n.bg-grey-dk-250 {\n background-color: $grey-dk-250 !important;\n}\n\n.bg-grey-dk-300 {\n background-color: $grey-dk-300 !important;\n}\n\n.bg-grey-lt-000 {\n background-color: $grey-lt-000 !important;\n}\n\n.bg-grey-lt-100 {\n background-color: $grey-lt-100 !important;\n}\n\n.bg-grey-lt-200 {\n background-color: $grey-lt-200 !important;\n}\n\n.bg-grey-lt-300 {\n background-color: $grey-lt-300 !important;\n}\n\n.bg-blue-000 {\n background-color: $blue-000 !important;\n}\n\n.bg-blue-100 {\n background-color: $blue-100 !important;\n}\n\n.bg-blue-200 {\n background-color: $blue-200 !important;\n}\n\n.bg-blue-300 {\n background-color: $blue-300 !important;\n}\n\n.bg-green-000 {\n background-color: $green-000 !important;\n}\n\n.bg-green-100 {\n background-color: $green-100 !important;\n}\n\n.bg-green-200 {\n background-color: $green-200 !important;\n}\n\n.bg-green-300 {\n background-color: $green-300 !important;\n}\n\n.bg-purple-000 {\n background-color: $purple-000 !important;\n}\n\n.bg-purple-100 {\n background-color: $purple-100 !important;\n}\n\n.bg-purple-200 {\n background-color: $purple-200 !important;\n}\n\n.bg-purple-300 {\n background-color: $purple-300 !important;\n}\n\n.bg-yellow-000 {\n background-color: $yellow-000 !important;\n}\n\n.bg-yellow-100 {\n background-color: $yellow-100 !important;\n}\n\n.bg-yellow-200 {\n background-color: $yellow-200 !important;\n}\n\n.bg-yellow-300 {\n background-color: $yellow-300 !important;\n}\n\n.bg-red-000 {\n background-color: $red-000 !important;\n}\n\n.bg-red-100 {\n background-color: $red-100 !important;\n}\n\n.bg-red-200 {\n background-color: $red-200 !important;\n}\n\n.bg-red-300 {\n background-color: $red-300 !important;\n}\n","// Utility classes for layout\n\n// Display\n\n.d-block {\n display: block !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .d-sm-block, .d-md-none, .d-lg-inline\n .d-#{$media-query}-block {\n display: block !important;\n }\n .d-#{$media-query}-flex {\n display: flex !important;\n }\n .d-#{$media-query}-inline {\n display: inline !important;\n }\n .d-#{$media-query}-inline-block {\n display: inline-block !important;\n }\n .d-#{$media-query}-none {\n display: none !important;\n }\n }\n }\n}\n\n// Horizontal alignment\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.flex-justify-start {\n justify-content: flex-start !important;\n}\n\n.flex-justify-end {\n justify-content: flex-end !important;\n}\n\n.flex-justify-between {\n justify-content: space-between !important;\n}\n\n.flex-justify-around {\n justify-content: space-around !important;\n}\n\n// Vertical alignment\n\n.v-align-baseline {\n vertical-align: baseline !important;\n}\n\n.v-align-bottom {\n vertical-align: bottom !important;\n}\n\n.v-align-middle {\n vertical-align: middle !important;\n}\n\n.v-align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.v-align-text-top {\n vertical-align: text-top !important;\n}\n\n.v-align-top {\n vertical-align: top !important;\n}\n","// Utility classes for typography\n\n.fs-1 {\n @include fs-1;\n}\n\n.fs-2 {\n @include fs-2;\n}\n\n.fs-3 {\n @include fs-3;\n}\n\n.fs-4 {\n @include fs-4;\n}\n\n.fs-5 {\n @include fs-5;\n}\n\n.fs-6 {\n @include fs-6;\n}\n\n.fs-7 {\n @include fs-7;\n}\n\n.fs-8 {\n @include fs-8;\n}\n\n.fs-9 {\n @include fs-9;\n}\n\n.fs-10 {\n @include fs-10;\n}\n\n.fw-300 {\n font-weight: 300 !important;\n}\n\n.fw-400 {\n font-weight: 400 !important;\n}\n\n.fw-500 {\n font-weight: 500 !important;\n}\n\n.fw-700 {\n font-weight: 700 !important;\n}\n\n.lh-0 {\n line-height: 0 !important;\n}\n\n.lh-default {\n line-height: $body-line-height;\n}\n\n.lh-tight {\n line-height: $body-heading-line-height;\n}\n\n.ls-5 {\n letter-spacing: 0.05em !important;\n}\n\n.ls-10 {\n letter-spacing: 0.1em !important;\n}\n\n.ls-0 {\n letter-spacing: 0 !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n","// Utility classes for lists\n\n// stylelint-disable selector-max-type\n\n.list-style-none {\n padding: 0 !important;\n margin: 0 !important;\n list-style: none !important;\n\n li {\n &::before {\n display: none !important;\n }\n }\n}\n","// Utility classes for margins and padding\n\n// stylelint-disable block-opening-brace-space-after, block-opening-brace-space-before\n\n// Margin spacer utilities\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-0, .m-1, .m-2...\n .m-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n .mx-#{$scale}-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-sm-0, .m-md-1, .m-lg-2...\n .m-#{$media-query}-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$media-query}-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$media-query}-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$media-query}-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n }\n }\n}\n\n// Padding spacer utilities\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-0, .p-1, .p-2...\n .p-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @include mq($media-query) {\n @for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-sm-0, .p-md-1, .p-lg-2...\n .p-#{$media-query}-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$media-query}-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$media-query}-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n }\n }\n}\n","// stylelint-disable selector-max-specificity, selector-max-id, selector-max-type, selector-no-qualifying-type\n\n@media print {\n .site-footer,\n .site-button,\n #edit-this-page,\n #back-to-top,\n .site-nav,\n .main-header {\n display: none !important;\n }\n\n .side-bar {\n width: 100%;\n height: auto;\n border-right: 0 !important;\n }\n\n .site-header {\n border-bottom: 1px solid $border-color;\n }\n\n .site-title {\n font-size: 1rem !important;\n font-weight: 700 !important;\n }\n\n .text-small {\n font-size: 8pt !important;\n }\n\n pre.highlight {\n border: 1px solid $border-color;\n }\n\n .main {\n max-width: none;\n margin-left: 0;\n }\n}\n","// Skipnav\n// Skip to main content\n\na.skip-to-main {\n left: -999px;\n position: absolute;\n top: auto;\n width: 1px;\n height: 1px;\n overflow: hidden;\n z-index: -999;\n}\n\na.skip-to-main:focus,\na.skip-to-main:active {\n color: $link-color;\n background-color: $body-background-color;\n left: auto;\n top: auto;\n width: 30%;\n height: auto;\n overflow: auto;\n margin: 10px 35%;\n padding: 5px;\n border-radius: 15px;\n border: 4px solid $btn-primary-color;\n text-align: center;\n font-size: 1.2em;\n z-index: 999;\n}\n","\n$logo: \"/assets/images/logo.png\";\n\n@import \"./support/support\";\n@import \"./custom/setup\";\n@import \"./color_schemes/light\";\n\n@import \"./modules\";\ndiv.opaque {\n background-color: $body-background-color;\n}p.warning, blockquote.warning {\n background: rgba($yellow-000, 0.2);\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $yellow-300;\n content: \"Warning\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .warning-title {\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.warning-title, blockquote.warning-title {\n background: rgba($yellow-000, 0.2);\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.warning {\n margin-left: 0;\n margin-right: 0;\n \n > p:first-child {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.warning-title {\n margin-left: 0;\n margin-right: 0;\n \n > p:nth-child(2) {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\np.danger, blockquote.danger {\n background: rgba($red-000, 0.2);\n border-left: $border-radius solid $red-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $red-300;\n content: \"Danger\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .danger-title {\n color: $red-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.danger-title, blockquote.danger-title {\n background: rgba($red-000, 0.2);\n border-left: $border-radius solid $red-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $red-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.danger {\n margin-left: 0;\n margin-right: 0;\n \n > p:first-child {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.danger-title {\n margin-left: 0;\n margin-right: 0;\n \n > p:nth-child(2) {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\np.note, blockquote.note {\n background: rgba($iueblue-000, 0.2);\n border-left: $border-radius solid $iueblue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $iueblue-300;\n content: \"Note\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .note-title {\n color: $iueblue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.note-title, blockquote.note-title {\n background: rgba($iueblue-000, 0.2);\n border-left: $border-radius solid $iueblue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $iueblue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.note {\n margin-left: 0;\n margin-right: 0;\n \n > p:first-child {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.note-title {\n margin-left: 0;\n margin-right: 0;\n \n > p:nth-child(2) {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n@import \"./custom/custom\";\n\n\n","$iueblue-000: #005077;\n$iueblue-100: #005077;\n$iueblue-200: #005077;\n$iueblue-300: #005077;"],"file":"just-the-docs-light.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/vendor/OneLightJekyll/syntax.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/vendor/normalize.scss/normalize.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/base.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/color_schemes/light.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/support/mixins/_typography.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/support/mixins/_layout.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/support/_variables.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/layout.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/content.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/navigation.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/typography.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/labels.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/buttons.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/support/mixins/_buttons.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/search.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/tables.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/code.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/utilities/_colors.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/utilities/_layout.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/utilities/_typography.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/utilities/_lists.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/utilities/_spacing.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/print.scss","../../../../../../../var/lib/gems/3.2.0/gems/just-the-docs-0.7.0/_sass/skiptomain.scss","just-the-docs-light.scss","../../_sass/custom/setup.scss"],"names":[],"mappings":"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EACA;;;AAGF;EACE,OItBW;EJuBX;;;AAGF;EACE;EACA,uBI/BY;EJgCZ;;AAEA;EACE;;;AAIJ;EACE,aIvEiB;EJwEjB;EACA,aIvEiB;;;AJ0EnB;AAAA;EAEE;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA,kBI/DY;EJgEZ;;;AAIF;EACE;EAGA;EACA;EACA;EACA;;;AK7GF;EACE;EACA;EACA;EACA,kBD6BY;;ADrBV;EEZJ;IAOI;IACA;IACA,ODwFW;ICvFX;IACA;IACA;;;AFAA;EEZJ;IAgBI;IACA,WD+EQ;;;;ADpFR;EESJ;IAEI;IACA,WD6EY;IC5EZ,aDwEW;;;ADrFX;EESJ;IAUI;;;;AAQJ;EFhBE,eCuDK;EDtDL,cCsDK;ECpCL,aDoCK;ECnCL,gBDmCK;;ADlEH;EE2BJ;IFZI,eCqDG;IDpDH,cCoDG;;;ADpEH;EE2BJ;IAOI,aDkCG;ICjCH,gBDiCG;;;;AC7BP;EACE;EACA;EACA,kBDrBY;;ADrBV;EEuCJ;IAMI;IACA;IACA,QD2CY;IC1CZ,kBDjCI;ICkCJ;;;AAGF;EACE;;AFrDA;EEoDF;IAII;;;;AAKN;AAAA;AAAA;EAGE;;AFhEE;EE6DJ;AAAA;AAAA;IAMI,ODiBQ;;;;ACbZ;EACE;;AAEA;EACE;;AF3EA;EEuEJ;IAQI;IACA,aDVG;ICWH,gBDfG;ICgBH;IACA;;;;AAIJ;EACE;EACA,YDCc;ECAd;;AF1FE;EEuFJ;IAMI,QDHY;ICIZ,YDJY;ICKZ;;;;AAIJ;EFxFE,eCuDK;EDtDL,cCsDK;ECoCL;EACA;EACA;EACA;EACA,aDzCK;EC0CL,gBD1CK;EC2CL,ODxFY;EFOZ;;AC3BE;EEmGJ;IFpFI,eCqDG;IDpDH,cCoDG;;;ADpEH;EEmGJ;IHrEI;IACA,aEpCuB;;;ADKvB;EEmGJ;IAaI,aDhDG;ICiDH,gBDjDG;;;;ACsDL;EACE;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA,SDjEK;ECkEL;;;AFpIE;EEwIF;IACE;;;AAIJ;EACE;;;AAQF;EACE;;;AASF;EACE;EACA,gBD1FM;EC2FN;;AFnKE;EEg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FJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AE3HF;EACE;EACA;EACA;EACA,QRgFM;EQ/EN,SRuEK;EQtEL;;ATME;ESZJ;IASI;IACA;IACA;IACA;IACA;;;;AAIJ;EACE;EACA;EACA,QR8DK;EQ7DL;EACA,eRmEc;EQlEd,YACE;EAEF;;ATdE;ESKJ;IAYI;IACA;IACA,WRwEmB;IQvEnB;IACA;IACA;IACA;;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA,ORhBY;EQiBZ,kBRnBM;EQoBN;EACA;EACA;EACA;EACA;;ATvCE;ES2BJ;IAeI;IACA;IACA,kBR7BI;IQ8BJ;;;AAGF;EACE;;AAEA;EACE,OR3BO;;;AQgCb;EACE;EACA;EACA;EACA,cRKK;;ADlEH;ESyDJ;IAOI,cRIG;IQHH;;;AAGF;EACE;EACA;EACA;EACA,ORxDU;;;AQ4Dd;EACE;EACA;EACA;EACA;EACA;EACA;EACA,kBRpEM;EQqEN,4BRPc;EQQd,2BRRc;EQSd,YACE;;ATvFA;ES4EJ;IAeI;IACA,ORDmB;IQEnB;;;;AAIJ;EACE;EACA,eRpCK;EQqCL;EVzFA;;ACXE;ESiGJ;IVnFI;;;ACdA;ESiGJ;IV9FE;;;ACHE;ESiGJ;IV3FI;;;;AUsGJ;EACE;EACA;;;AAGF;EACE;EACA;;AAEA;EAEE,kBX3Ha;;;AW+HjB;EACE;EACA,aR7DK;EQ8DL,gBR9DK;;ADhEH;ES2HJ;IAMI;IACA;IACA,eRnEG;IQoEH;;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;EV3IF;;ACHE;ES6IF;IVvIE;;;ACNA;ES6IF;IVlJA;;;ACKE;ES6IF;IV/IE;;;AUwJF;EACE,ORrFG;EQsFH,QRtFG;EQuFH,cRzFG;EQ0FH,ORjIS;EQkIT;;AAGF;EACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA,OR5JY;EQ6JZ;EACA;EV3LA;;ACaE;ESwKJ;IVlLI;;;;AU4LJ;EACE;EACA,aRpHK;EQqHL,gBRrHK;EQsHL,cRpHK;EQqHL,aRvHK;EQwHL,ORxKY;EQyKZ;EACA,aR9GO;EQ+GP,mBRrKY;EF3BZ;;ACKE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CE;;;AbPE;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;Ab9BJ;EaiBE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;;AAQR;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAKF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;ACjGF;EfDE;;ACaE;EcZJ;IfEI;;;;AeEJ;EfGE;;ACKE;EcRJ;IfMI;;;;AeFJ;EfOE;;ACHE;EcJJ;IfUI;;;;AeNJ;EfWE;;ACXE;EcAJ;IfcI;;;;AeVJ;EfeE;;ACnBE;EcIJ;IfkBI;;;;AedJ;EfmBE;;AC3BE;EcQJ;IfsBI;IACA,aEpCuB;;;;AaiB3B;EfwBE;EACA,aE1CyB;;ADKvB;EcYJ;If4BI;;;;AexBJ;Ef6BE;EACA,aEnDyB;;ADKvB;EcgBJ;IfiCI;;;;Ae7BJ;EfkCE;EACA,aE5DyB;;ADKvB;EcoBJ;IfsCI;;;;AelCJ;EfuCE;EACA,aErEyB;;ADKvB;EcwBJ;If2CI;;;;AevCJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE,abxDiB;;;Aa2DnB;EACE,ab1DyB;;;Aa6D3B;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AC/EF;EACE;EACA;EACA;;AAGE;EACE;;;ACLN;EACE;EACA;;;AAQA;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AAhCF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAEF;EACE;EACA;;;AhBlCA;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhBzEJ;EgB6CE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AAaN;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAvBF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AhB7GA;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AhB/IJ;EgBwHE;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;EAvBF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAEF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;IACA;;;AC3JR;EACE;AAAA;AAAA;AAAA;AAAA;AAAA;IAME;;EAGF;IACE;IACA;IACA;;EAGF;IACE;;EAGF;IACE;IACA;;EAGF;IACE;;EAGF;IACE;;EAGF;IACE;IACA;;;AClCJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE,OjBwBW;EiBvBX,kBjBaM;EiBZN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACpBF;EACE,kBlBoBM;;;AkBnBP;EACG;EACA;EACA,elB8EY;EkB7EZ;EACA;;AAEA;EACI,OlBoCK;EkBnCL;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlB0BO;EkBzBP;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBmDY;EkBlDZ;EACA;;AACA;EACE;EACA;EACA,OlBQO;EkBPP;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACI;EACA;EACA,elBOY;EkBNZ;EACA;;AAEA;EACI,OlB/BE;EkBgCF;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OlBzCI;EkB0CJ;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elBpBY;EkBqBZ;EACA;;AACA;EACE;EACA;EACA,OlB3DI;EkB4DJ;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACI;EACA;EACA,elBhEY;EkBiEZ;EACA;;AAEA;EACI,OC7JM;ED8JN;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE,OCvKQ;EDwKR;EACA;EACA;EACA;EACA;;;AAIN;EACI;EACA;EACA,elB3FY;EkB4FZ;EACA;;AACA;EACE;EACA;EACA,OCzLQ;ED0LR;EACA;EACA;EACA;EACA;;;AAIN;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;;AAEA;EACE;;AAGF;EACE","sourcesContent":["// Generated with OneLightJekyll applied to Atom's One Light theme\n\n.highlight,\npre.highlight {\n background: #f9f9f9;\n color: #383942;\n}\n.highlight pre {\n background: #f9f9f9;\n}\n.highlight .hll {\n background: #f9f9f9;\n}\n.highlight .c {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .err {\n color: #fff;\n background-color: #e05151;\n}\n.highlight .k {\n color: #a625a4;\n}\n.highlight .l {\n color: #50a04f;\n}\n.highlight .n {\n color: #383942;\n}\n.highlight .o {\n color: #383942;\n}\n.highlight .p {\n color: #383942;\n}\n.highlight .cm {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .cp {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .c1 {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .cs {\n color: #9fa0a6;\n font-style: italic;\n}\n.highlight .ge {\n font-style: italic;\n}\n.highlight .gs {\n font-weight: 700;\n}\n.highlight .kc {\n color: #a625a4;\n}\n.highlight .kd {\n color: #a625a4;\n}\n.highlight .kn {\n color: #a625a4;\n}\n.highlight .kp {\n color: #a625a4;\n}\n.highlight .kr {\n color: #a625a4;\n}\n.highlight .kt {\n color: #a625a4;\n}\n.highlight .ld {\n color: #50a04f;\n}\n.highlight .m {\n color: #b66a00;\n}\n.highlight .s {\n color: #50a04f;\n}\n.highlight .na {\n color: #b66a00;\n}\n.highlight .nb {\n color: #ca7601;\n}\n.highlight .nc {\n color: #ca7601;\n}\n.highlight .no {\n color: #ca7601;\n}\n.highlight .nd {\n color: #ca7601;\n}\n.highlight .ni {\n color: #ca7601;\n}\n.highlight .ne {\n color: #ca7601;\n}\n.highlight .nf {\n color: #383942;\n}\n.highlight .nl {\n color: #ca7601;\n}\n.highlight .nn {\n color: #383942;\n}\n.highlight .nx {\n color: #383942;\n}\n.highlight .py {\n color: #ca7601;\n}\n.highlight .nt {\n color: #e35549;\n}\n.highlight .nv {\n color: #ca7601;\n}\n.highlight .ow {\n font-weight: 700;\n}\n.highlight .w {\n color: #f8f8f2;\n}\n.highlight .mf {\n color: #b66a00;\n}\n.highlight .mh {\n color: #b66a00;\n}\n.highlight .mi {\n color: #b66a00;\n}\n.highlight .mo {\n color: #b66a00;\n}\n.highlight .sb {\n color: #50a04f;\n}\n.highlight .sc {\n color: #50a04f;\n}\n.highlight .sd {\n color: #50a04f;\n}\n.highlight .s2 {\n color: #50a04f;\n}\n.highlight .se {\n color: #50a04f;\n}\n.highlight .sh {\n color: #50a04f;\n}\n.highlight .si {\n color: #50a04f;\n}\n.highlight .sx {\n color: #50a04f;\n}\n.highlight .sr {\n color: #0083bb;\n}\n.highlight .s1 {\n color: #50a04f;\n}\n.highlight .ss {\n color: #0083bb;\n}\n.highlight .bp {\n color: #ca7601;\n}\n.highlight .vc {\n color: #ca7601;\n}\n.highlight .vg {\n color: #ca7601;\n}\n.highlight .vi {\n color: #e35549;\n}\n.highlight .il {\n color: #b66a00;\n}\n.highlight .gu {\n color: #75715e;\n}\n.highlight .gd {\n color: #e05151;\n}\n.highlight .gi {\n color: #43d089;\n}\n.highlight .language-json .w + .s2 {\n color: #e35549;\n}\n.highlight .language-json .kc {\n color: #0083bb;\n}\n","/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput {\n /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect {\n /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n","// Base element style overrides\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\n:root {\n color-scheme: $color-scheme;\n}\n\n* {\n box-sizing: border-box;\n}\n\nhtml {\n @include fs-4;\n\n scroll-behavior: smooth;\n}\n\nbody {\n font-family: $body-font-family;\n font-size: inherit;\n line-height: $body-line-height;\n color: $body-text-color;\n background-color: $body-background-color;\n overflow-wrap: break-word;\n}\n\nol,\nul,\ndl,\npre,\naddress,\nblockquote,\ntable,\ndiv,\nhr,\nform,\nfieldset,\nnoscript .table-wrapper {\n margin-top: 0;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n#toctitle {\n margin-top: 0;\n margin-bottom: 1em;\n font-weight: 500;\n line-height: $body-heading-line-height;\n color: $body-heading-color;\n}\n\np {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n\na {\n color: $link-color;\n text-decoration: none;\n}\n\na:not([class]) {\n text-decoration: underline;\n text-decoration-color: $border-color;\n text-underline-offset: 2px;\n\n &:hover {\n text-decoration-color: rgba($link-color, 0.45);\n }\n}\n\ncode {\n font-family: $mono-font-family;\n font-size: 0.75em;\n line-height: $body-line-height;\n}\n\nfigure,\npre {\n margin: 0;\n}\n\nli {\n margin: 0.25em 0;\n}\n\nimg {\n max-width: 100%;\n height: auto;\n}\n\nhr {\n height: 1px;\n padding: 0;\n margin: $sp-6 0;\n background-color: $border-color;\n border: 0;\n}\n\n// adds a GitHub-style sidebar to blockquotes\nblockquote {\n margin: 10px 0;\n\n // resets user-agent stylesheets for blockquotes\n margin-block-start: 0;\n margin-inline-start: 0;\n padding-left: 1rem;\n border-left: 3px solid $border-color;\n}\n","$color-scheme: light !default;\n$body-background-color: $white !default;\n$body-heading-color: $grey-dk-300 !default;\n$body-text-color: $grey-dk-100 !default;\n$link-color: $purple-000 !default;\n$nav-child-link-color: $grey-dk-100 !default;\n$sidebar-color: $grey-lt-000 !default;\n$base-button-color: #f7f7f7 !default;\n$btn-primary-color: $purple-100 !default;\n$code-background-color: $grey-lt-000 !default;\n$feedback-color: darken($sidebar-color, 3%) !default;\n$table-background-color: $white !default;\n$search-background-color: $white !default;\n$search-result-preview-color: $grey-dk-000 !default;\n\n@import \"./vendor/OneLightJekyll/syntax\";\n","@mixin fs-1 {\n font-size: $font-size-1 !important;\n\n @include mq(sm) {\n font-size: $font-size-1-sm !important;\n }\n}\n\n@mixin fs-2 {\n font-size: $font-size-2 !important;\n\n @include mq(sm) {\n font-size: $font-size-3 !important;\n }\n}\n\n@mixin fs-3 {\n font-size: $font-size-3 !important;\n\n @include mq(sm) {\n font-size: $font-size-4 !important;\n }\n}\n\n@mixin fs-4 {\n font-size: $font-size-4 !important;\n\n @include mq(sm) {\n font-size: $font-size-5 !important;\n }\n}\n\n@mixin fs-5 {\n font-size: $font-size-5 !important;\n\n @include mq(sm) {\n font-size: $font-size-6 !important;\n }\n}\n\n@mixin fs-6 {\n font-size: $font-size-6 !important;\n\n @include mq(sm) {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n }\n}\n\n@mixin fs-7 {\n font-size: $font-size-7 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-8 !important;\n }\n}\n\n@mixin fs-8 {\n font-size: $font-size-8 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-9 !important;\n }\n}\n\n@mixin fs-9 {\n font-size: $font-size-9 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-10 !important;\n }\n}\n\n@mixin fs-10 {\n font-size: $font-size-10 !important;\n line-height: $body-heading-line-height;\n\n @include mq(sm) {\n font-size: $font-size-10-sm !important;\n }\n}\n","// Media query\n\n// Media query mixin\n// Usage:\n// @include mq(md) {\n// ..medium and up styles\n// }\n@mixin mq($name) {\n // Retrieves the value from the key\n $value: map-get($media-queries, $name);\n\n // If the key exists in the map\n @if $value {\n // Prints a media query based on the value\n @media (min-width: $value) {\n @content;\n }\n } @else {\n @warn \"No value could be retrieved from `#{$media-query}`. Please make sure it is defined in `$media-queries` map.\";\n }\n}\n\n// Responsive container\n\n@mixin container {\n padding-right: $gutter-spacing-sm;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-right: $gutter-spacing;\n padding-left: $gutter-spacing;\n }\n}\n","// Typography\n\n// prettier-ignore\n$body-font-family: system-ui, -apple-system, blinkmacsystemfont, \"Segoe UI\",\n roboto, \"Helvetica Neue\", arial, sans-serif, \"Segoe UI Emoji\" !default;\n$mono-font-family: \"SFMono-Regular\", menlo, consolas, monospace !default;\n$root-font-size: 16px !default; // DEPRECATED: previously base font-size for rems\n$body-line-height: 1.4 !default;\n$content-line-height: 1.6 !default;\n$body-heading-line-height: 1.25 !default;\n\n// Font size\n// `-sm` suffix is the size at the small (and above) media query\n\n$font-size-1: 0.5625rem !default;\n$font-size-1-sm: 0.625rem !default;\n$font-size-2: 0.6875rem !default; // h4 - uppercased!, h6 not uppercased, text-small\n$font-size-3: 0.75rem !default; // h5\n$font-size-4: 0.875rem !default;\n$font-size-5: 1rem !default; // h3\n$font-size-6: 1.125rem !default; // h2\n$font-size-7: 1.5rem !default;\n$font-size-8: 2rem !default; // h1\n$font-size-9: 2.25rem !default;\n$font-size-10: 2.625rem !default;\n$font-size-10-sm: 3rem !default;\n\n// Colors\n\n$white: #fff !default;\n$grey-dk-000: #959396 !default;\n$grey-dk-100: #5c5962 !default;\n$grey-dk-200: #44434d !default;\n$grey-dk-250: #302d36 !default;\n$grey-dk-300: #27262b !default;\n$grey-lt-000: #f5f6fa !default;\n$grey-lt-100: #eeebee !default;\n$grey-lt-200: #ecebed !default;\n$grey-lt-300: #e6e1e8 !default;\n$purple-000: #7253ed !default;\n$purple-100: #5e41d0 !default;\n$purple-200: #4e26af !default;\n$purple-300: #381885 !default;\n$blue-000: #2c84fa !default;\n$blue-100: #2869e6 !default;\n$blue-200: #264caf !default;\n$blue-300: #183385 !default;\n$green-000: #41d693 !default;\n$green-100: #11b584 !default;\n$green-200: #009c7b !default;\n$green-300: #026e57 !default;\n$yellow-000: #ffeb82 !default;\n$yellow-100: #fadf50 !default;\n$yellow-200: #f7d12e !default;\n$yellow-300: #e7af06 !default;\n$red-000: #f77e7e !default;\n$red-100: #f96e65 !default;\n$red-200: #e94c4c !default;\n$red-300: #dd2e2e !default;\n\n// Spacing\n\n$spacing-unit: 1rem; // 1rem == 16px\n\n$spacers: (\n sp-0: 0,\n sp-1: $spacing-unit * 0.25,\n sp-2: $spacing-unit * 0.5,\n sp-3: $spacing-unit * 0.75,\n sp-4: $spacing-unit,\n sp-5: $spacing-unit * 1.5,\n sp-6: $spacing-unit * 2,\n sp-7: $spacing-unit * 2.5,\n sp-8: $spacing-unit * 3,\n sp-9: $spacing-unit * 3.5,\n sp-10: $spacing-unit * 4,\n) !default;\n$sp-1: map-get($spacers, sp-1) !default; // 0.25 rem == 4px\n$sp-2: map-get($spacers, sp-2) !default; // 0.5 rem == 8px\n$sp-3: map-get($spacers, sp-3) !default; // 0.75 rem == 12px\n$sp-4: map-get($spacers, sp-4) !default; // 1 rem == 16px\n$sp-5: map-get($spacers, sp-5) !default; // 1.5 rem == 24px\n$sp-6: map-get($spacers, sp-6) !default; // 2 rem == 32px\n$sp-7: map-get($spacers, sp-7) !default; // 2.5 rem == 40px\n$sp-8: map-get($spacers, sp-8) !default; // 3 rem == 48px\n$sp-9: map-get($spacers, sp-9) !default; // 3.5 rem == 56px\n$sp-10: map-get($spacers, sp-10) !default; // 4 rem == 64px\n\n// Borders\n\n$border: 1px solid !default;\n$border-radius: 4px !default;\n$border-color: $grey-lt-100 !default;\n\n// Grid system\n\n$gutter-spacing: $sp-6 !default;\n$gutter-spacing-sm: $sp-4 !default;\n$nav-width: 16.5rem !default;\n$nav-width-md: 15.5rem !default;\n$nav-list-item-height: $sp-6 !default;\n$nav-list-item-height-sm: $sp-8 !default;\n$nav-list-expander-right: true;\n$content-width: 50rem !default;\n$header-height: 3.75rem !default;\n$search-results-width: $content-width - $nav-width !default;\n$transition-duration: 400ms;\n\n// Media queries in pixels\n\n$media-queries: (\n xs: 20rem,\n sm: 31.25rem,\n md: $content-width,\n lg: $content-width + $nav-width,\n xl: 87.5rem,\n) !default;\n","// The basic two column layout\n\n.side-bar {\n z-index: 0;\n display: flex;\n flex-wrap: wrap;\n background-color: $sidebar-color;\n\n @include mq(md) {\n flex-flow: column nowrap;\n position: fixed;\n width: $nav-width-md;\n height: 100%;\n border-right: $border $border-color;\n align-items: flex-end;\n }\n\n @include mq(lg) {\n width: calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width});\n min-width: $nav-width;\n }\n}\n\n.main {\n @include mq(md) {\n position: relative;\n max-width: $content-width;\n margin-left: $nav-width-md;\n }\n\n @include mq(lg) {\n // stylelint-disable function-name-case\n // disable for Max(), we want to use the CSS max() function\n margin-left: Max(\n #{$nav-width},\n calc((100% - #{$nav-width + $content-width}) / 2 + #{$nav-width})\n );\n // stylelint-enable function-name-case\n }\n}\n\n.main-content-wrap {\n @include container;\n\n padding-top: $gutter-spacing-sm;\n padding-bottom: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-top: $gutter-spacing;\n padding-bottom: $gutter-spacing;\n }\n}\n\n.main-header {\n z-index: 0;\n display: none;\n background-color: $sidebar-color;\n\n @include mq(md) {\n display: flex;\n justify-content: space-between;\n height: $header-height;\n background-color: $body-background-color;\n border-bottom: $border $border-color;\n }\n\n &.nav-open {\n display: block;\n\n @include mq(md) {\n display: flex;\n }\n }\n}\n\n.site-nav,\n.site-header,\n.site-footer {\n width: 100%;\n\n @include mq(lg) {\n width: $nav-width;\n }\n}\n\n.site-nav {\n display: none;\n\n &.nav-open {\n display: block;\n }\n\n @include mq(md) {\n display: block;\n padding-top: $sp-8;\n padding-bottom: $gutter-spacing-sm;\n overflow-y: auto;\n flex: 1 1 auto;\n }\n}\n\n.site-header {\n display: flex;\n min-height: $header-height;\n align-items: center;\n\n @include mq(md) {\n height: $header-height;\n max-height: $header-height;\n border-bottom: $border $border-color;\n }\n}\n\n.site-title {\n @include container;\n\n flex-grow: 1;\n display: flex;\n height: 100%;\n align-items: center;\n padding-top: $sp-3;\n padding-bottom: $sp-3;\n color: $body-heading-color;\n @include fs-6;\n\n @include mq(md) {\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n }\n}\n\n@if variable-exists(logo) {\n .site-logo {\n width: 100%;\n height: 100%;\n background-image: url($logo);\n background-repeat: no-repeat;\n background-position: left center;\n background-size: contain;\n }\n}\n\n.site-button {\n display: flex;\n height: 100%;\n padding: $gutter-spacing-sm;\n align-items: center;\n}\n\n@include mq(md) {\n .site-header .site-button {\n display: none;\n }\n}\n\n.site-title:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n}\n\n.site-button:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n}\n\n// stylelint-disable selector-max-type\n\nbody {\n position: relative;\n padding-bottom: $sp-10;\n overflow-y: scroll;\n\n @include mq(md) {\n position: static;\n padding-bottom: 0;\n }\n}\n\n// stylelint-enable selector-max-type\n\n.site-footer {\n @include container;\n\n position: absolute;\n bottom: 0;\n left: 0;\n padding-top: $sp-4;\n padding-bottom: $sp-4;\n color: $grey-dk-000;\n @include fs-2;\n\n @include mq(md) {\n position: static;\n justify-self: end;\n }\n}\n\n.icon {\n width: $sp-5;\n height: $sp-5;\n color: $link-color;\n}\n","@charset \"UTF-8\";\n\n// Styles for rendered markdown in the .main-content container\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity, selector-max-id\n\n.main-content {\n line-height: $content-line-height;\n\n ol,\n ul,\n dl,\n pre,\n address,\n blockquote,\n .table-wrapper {\n margin-top: 0.5em;\n }\n\n a {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n ul,\n ol {\n padding-left: 1.5em;\n }\n\n li {\n .highlight {\n margin-top: $sp-1;\n }\n }\n\n ol {\n list-style-type: none;\n counter-reset: step-counter;\n\n > li {\n position: relative;\n\n &::before {\n position: absolute;\n top: 0.2em;\n left: -1.6em;\n color: $grey-dk-000;\n content: counter(step-counter);\n counter-increment: step-counter;\n @include fs-3;\n\n @include mq(sm) {\n top: 0.11em;\n }\n }\n\n ol {\n counter-reset: sub-counter;\n\n > li {\n &::before {\n content: counter(sub-counter, lower-alpha);\n counter-increment: sub-counter;\n }\n }\n }\n }\n }\n\n ul {\n list-style: none;\n\n > li {\n &::before {\n position: absolute;\n margin-left: -1.4em;\n color: $grey-dk-000;\n content: \"•\";\n }\n }\n }\n\n .task-list-item {\n &::before {\n content: \"\";\n }\n }\n\n .task-list-item-checkbox {\n margin-right: 0.6em;\n margin-left: -1.4em;\n\n // The same margin-left is used above for ul > li::before\n }\n\n hr + * {\n margin-top: 0;\n }\n\n h1:first-of-type {\n margin-top: 0.5em;\n }\n\n dl {\n display: grid;\n grid-template: auto / 10em 1fr;\n }\n\n dt,\n dd {\n margin: 0.25em 0;\n }\n\n dt {\n grid-column: 1;\n font-weight: 500;\n text-align: right;\n\n &::after {\n content: \":\";\n }\n }\n\n dd {\n grid-column: 2;\n margin-bottom: 0;\n margin-left: 1em;\n\n blockquote,\n div,\n dl,\n dt,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n li,\n ol,\n p,\n pre,\n table,\n ul,\n .table-wrapper {\n &:first-child {\n margin-top: 0;\n }\n }\n }\n\n dd,\n ol,\n ul {\n dl:first-child {\n dt:first-child,\n dd:nth-child(2) {\n margin-top: 0;\n }\n }\n }\n\n .anchor-heading {\n position: absolute;\n right: -$sp-4;\n width: $sp-5;\n height: 100%;\n padding-right: $sp-1;\n padding-left: $sp-1;\n overflow: visible;\n\n @include mq(md) {\n right: auto;\n left: -$sp-5;\n }\n\n svg {\n display: inline-block;\n width: 100%;\n height: 100%;\n color: $link-color;\n visibility: hidden;\n }\n }\n\n .anchor-heading:hover,\n .anchor-heading:focus,\n h1:hover > .anchor-heading,\n h2:hover > .anchor-heading,\n h3:hover > .anchor-heading,\n h4:hover > .anchor-heading,\n h5:hover > .anchor-heading,\n h6:hover > .anchor-heading {\n svg {\n visibility: visible;\n }\n }\n\n summary {\n cursor: pointer;\n }\n\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n #toctitle {\n position: relative;\n margin-top: 1.5em;\n margin-bottom: 0.25em;\n\n + table,\n + .table-wrapper,\n + .code-example,\n + .highlighter-rouge,\n + .sectionbody .listingblock {\n margin-top: 1em;\n }\n\n + p:not(.label) {\n margin-top: 0;\n }\n }\n\n > h1:first-child,\n > h2:first-child,\n > h3:first-child,\n > h4:first-child,\n > h5:first-child,\n > h6:first-child,\n > .sect1:first-child > h2,\n > .sect2:first-child > h3,\n > .sect3:first-child > h4,\n > .sect4:first-child > h5,\n > .sect5:first-child > h6 {\n margin-top: $sp-2;\n }\n}\n","// Main nav, breadcrumb, etc...\n// stylelint-disable selector-no-type, max-nesting-depth, selector-max-compound-selectors, selector-max-type, selector-max-specificity\n\n.nav-list {\n padding: 0;\n margin-top: 0;\n margin-bottom: 0;\n list-style: none;\n\n .nav-list-item {\n @include fs-4;\n\n position: relative;\n margin: 0;\n\n @include mq(md) {\n @include fs-3;\n }\n\n .nav-list-link {\n display: block;\n min-height: $nav-list-item-height-sm;\n padding-top: $sp-1;\n padding-bottom: $sp-1;\n line-height: #{$nav-list-item-height-sm - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height-sm;\n padding-left: $gutter-spacing-sm;\n } @else {\n padding-right: $gutter-spacing-sm;\n padding-left: $nav-list-item-height-sm;\n }\n\n @include mq(md) {\n min-height: $nav-list-item-height;\n line-height: #{$nav-list-item-height - 2 * $sp-1};\n @if $nav-list-expander-right {\n padding-right: $nav-list-item-height;\n padding-left: $gutter-spacing;\n } @else {\n padding-right: $gutter-spacing;\n padding-left: $nav-list-item-height;\n }\n }\n\n &.external > svg {\n width: $sp-4;\n height: $sp-4;\n vertical-align: text-bottom;\n }\n\n &.active {\n font-weight: 600;\n text-decoration: none;\n }\n\n &:hover,\n &.active {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 80%,\n rgba($feedback-color, 0) 100%\n );\n }\n }\n\n .nav-list-expander {\n position: absolute;\n @if $nav-list-expander-right {\n right: 0;\n }\n\n width: $nav-list-item-height-sm;\n height: $nav-list-item-height-sm;\n padding: #{$nav-list-item-height-sm * 0.25};\n color: $link-color;\n\n @include mq(md) {\n width: $nav-list-item-height;\n height: $nav-list-item-height;\n padding: #{$nav-list-item-height * 0.25};\n }\n\n &:hover {\n background-image: linear-gradient(\n -90deg,\n rgba($feedback-color, 1) 0%,\n rgba($feedback-color, 0.8) 100%\n );\n }\n\n @if $nav-list-expander-right {\n svg {\n transform: rotate(90deg);\n }\n }\n }\n\n > .nav-list {\n display: none;\n padding-left: $sp-3;\n list-style: none;\n\n .nav-list-item {\n position: relative;\n\n .nav-list-link {\n color: $nav-child-link-color;\n }\n\n .nav-list-expander {\n color: $nav-child-link-color;\n }\n }\n }\n\n &.active {\n > .nav-list-expander svg {\n @if $nav-list-expander-right {\n transform: rotate(-90deg);\n } @else {\n transform: rotate(90deg);\n }\n }\n\n > .nav-list {\n display: block;\n }\n }\n }\n}\n\n.nav-category {\n padding: $sp-2 $gutter-spacing-sm;\n font-weight: 600;\n text-align: start;\n text-transform: uppercase;\n border-bottom: $border $border-color;\n @include fs-2;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing;\n margin-top: $gutter-spacing-sm;\n text-align: start;\n\n &:first-child {\n margin-top: 0;\n }\n }\n}\n\n.nav-list.nav-category-list {\n > .nav-list-item {\n margin: 0;\n\n > .nav-list {\n padding: 0;\n\n > .nav-list-item {\n > .nav-list-link {\n color: $link-color;\n }\n\n > .nav-list-expander {\n color: $link-color;\n }\n }\n }\n }\n}\n\n// Aux nav\n\n.aux-nav {\n height: 100%;\n overflow-x: auto;\n @include fs-2;\n\n .aux-nav-list {\n display: flex;\n height: 100%;\n padding: 0;\n margin: 0;\n list-style: none;\n }\n\n .aux-nav-list-item {\n display: inline-block;\n height: 100%;\n padding: 0;\n margin: 0;\n }\n\n @include mq(md) {\n padding-right: $gutter-spacing-sm;\n }\n}\n\n// Breadcrumb nav\n\n.breadcrumb-nav {\n @include mq(md) {\n margin-top: -$sp-4;\n }\n}\n\n.breadcrumb-nav-list {\n padding-left: 0;\n margin-bottom: $sp-3;\n list-style: none;\n}\n\n.breadcrumb-nav-list-item {\n display: table-cell;\n @include fs-2;\n\n &::before {\n display: none;\n }\n\n &::after {\n display: inline-block;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $grey-dk-000;\n content: \"/\";\n }\n\n &:last-child {\n &::after {\n content: \"\";\n }\n }\n}\n","// Typography\n// stylelint-disable selector-no-type, selector-max-type, selector-max-specificity, selector-max-id\n\nh1,\n.text-alpha {\n @include fs-8;\n\n font-weight: 300;\n}\n\nh2,\n.text-beta,\n#toctitle {\n @include fs-6;\n}\n\nh3,\n.text-gamma {\n @include fs-5;\n}\n\nh4,\n.text-delta {\n @include fs-2;\n\n font-weight: 400;\n text-transform: uppercase;\n letter-spacing: 0.1em;\n}\n\nh4 code {\n text-transform: none;\n}\n\nh5,\n.text-epsilon {\n @include fs-3;\n}\n\nh6,\n.text-zeta {\n @include fs-2;\n}\n\n.text-small {\n @include fs-2;\n}\n\n.text-mono {\n font-family: $mono-font-family !important;\n}\n\n.text-left {\n text-align: left !important;\n}\n\n.text-center {\n text-align: center !important;\n}\n\n.text-right {\n text-align: right !important;\n}\n","// Labels (not the form kind)\n\n// this :not() prevents a style clash with Mermaid.js's\n// diagram labels, which also use .label\n// for more, see https://github.com/just-the-docs/just-the-docs/issues/1272\n// and the accompanying PR\n.label:not(g),\n.label-blue:not(g) {\n display: inline-block;\n padding: 0.16em 0.56em;\n margin-right: $sp-2;\n margin-left: $sp-2;\n color: $white;\n text-transform: uppercase;\n vertical-align: middle;\n background-color: $blue-100;\n @include fs-2;\n\n border-radius: 12px;\n}\n\n.label-green:not(g) {\n background-color: $green-200;\n}\n\n.label-purple:not(g) {\n background-color: $purple-100;\n}\n\n.label-red:not(g) {\n background-color: $red-200;\n}\n\n.label-yellow:not(g) {\n color: $grey-dk-200;\n background-color: $yellow-200;\n}\n","// Buttons and things that look like buttons\n// stylelint-disable color-named\n\n.btn {\n display: inline-block;\n box-sizing: border-box;\n padding: 0.3em 1em;\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n font-weight: 500;\n line-height: 1.5;\n color: $link-color;\n text-decoration: none;\n vertical-align: baseline;\n cursor: pointer;\n background-color: $base-button-color;\n border-width: 0;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n appearance: none;\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: darken($link-color, 2%);\n }\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n text-decoration: none;\n background-color: darken($base-button-color, 1%);\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($base-button-color, 3%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken(#dcdcdc, 5%);\n }\n\n &:disabled,\n &.disabled {\n &,\n &:hover {\n color: rgba(102, 102, 102, 0.5);\n cursor: default;\n background-color: rgba(229, 229, 229, 0.5);\n background-image: none;\n box-shadow: none;\n }\n }\n}\n\n.btn-outline {\n color: $link-color;\n background: transparent;\n box-shadow: inset 0 0 0 2px $grey-lt-300;\n\n &:hover,\n &:active,\n &.zeroclipboard-is-hover,\n &.zeroclipboard-is-active {\n color: darken($link-color, 4%);\n text-decoration: none;\n background-color: transparent;\n box-shadow: inset 0 0 0 3px $grey-lt-300;\n }\n\n &:focus {\n text-decoration: none;\n outline: none;\n box-shadow:\n inset 0 0 0 2px $grey-dk-100,\n 0 0 0 3px rgba(blue, 0.25);\n }\n\n &:focus:hover,\n &.selected:focus {\n box-shadow: inset 0 0 0 2px $grey-dk-100;\n }\n}\n\n.btn-primary {\n @include btn-color($white, $btn-primary-color);\n}\n\n.btn-purple {\n @include btn-color($white, $purple-100);\n}\n\n.btn-blue {\n @include btn-color($white, $blue-000);\n}\n\n.btn-green {\n @include btn-color($white, $green-100);\n}\n\n.btn-reset {\n background: none;\n border: none;\n margin: 0;\n text-align: inherit;\n font: inherit;\n border-radius: 0;\n appearance: none;\n}\n","// Colored button\n\n@mixin btn-color($fg, $bg) {\n color: $fg;\n background-color: darken($bg, 2%);\n background-image: linear-gradient(lighten($bg, 5%), darken($bg, 2%));\n box-shadow:\n 0 1px 3px rgba(0, 0, 0, 0.25),\n 0 4px 10px rgba(0, 0, 0, 0.12);\n\n &:hover,\n &.zeroclipboard-is-hover {\n color: $fg;\n background-color: darken($bg, 4%);\n background-image: linear-gradient((lighten($bg, 2%), darken($bg, 4%)));\n }\n\n &:active,\n &.selected,\n &.zeroclipboard-is-active {\n background-color: darken($bg, 5%);\n background-image: none;\n box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);\n }\n\n &.selected:hover {\n background-color: darken($bg, 10%);\n }\n}\n","// Search input and autocomplete\n\n.search {\n position: relative;\n z-index: 2;\n flex-grow: 1;\n height: $sp-10;\n padding: $sp-2;\n transition: padding linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: relative !important;\n width: auto !important;\n height: 100% !important;\n padding: 0;\n transition: none;\n }\n}\n\n.search-input-wrap {\n position: relative;\n z-index: 1;\n height: $sp-8;\n overflow: hidden;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n transition: height linear #{$transition-duration * 0.5};\n\n @include mq(md) {\n position: absolute;\n width: 100%;\n max-width: $search-results-width;\n height: 100% !important;\n border-radius: 0;\n box-shadow: none;\n transition: width ease $transition-duration;\n }\n}\n\n.search-input {\n position: absolute;\n width: 100%;\n height: 100%;\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing-sm + $sp-5};\n font-size: 1rem;\n color: $body-text-color;\n background-color: $search-background-color;\n border-top: 0;\n border-right: 0;\n border-bottom: 0;\n border-left: 0;\n border-radius: 0;\n\n @include mq(md) {\n padding: $sp-2 $gutter-spacing-sm $sp-2 #{$gutter-spacing + $sp-5};\n font-size: 0.875rem;\n background-color: $body-background-color;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n &:focus {\n outline: 0;\n\n + .search-label .search-icon {\n color: $link-color;\n }\n }\n}\n\n.search-label {\n position: absolute;\n display: flex;\n height: 100%;\n padding-left: $gutter-spacing-sm;\n\n @include mq(md) {\n padding-left: $gutter-spacing;\n transition: padding-left linear #{$transition-duration * 0.5};\n }\n\n .search-icon {\n width: #{$sp-4 * 1.2};\n height: #{$sp-4 * 1.2};\n align-self: center;\n color: $grey-dk-000;\n }\n}\n\n.search-results {\n position: absolute;\n left: 0;\n display: none;\n width: 100%;\n max-height: calc(100% - #{$sp-10});\n overflow-y: auto;\n background-color: $search-background-color;\n border-bottom-right-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n\n @include mq(md) {\n top: 100%;\n width: $search-results-width;\n max-height: calc(100vh - 200%) !important;\n }\n}\n\n.search-results-list {\n padding-left: 0;\n margin-bottom: $sp-1;\n list-style: none;\n @include fs-4;\n\n @include mq(md) {\n @include fs-3;\n }\n}\n\n.search-results-list-item {\n padding: 0;\n margin: 0;\n}\n\n.search-result {\n display: block;\n padding: $sp-1 $sp-3;\n\n &:hover,\n &.active {\n background-color: $feedback-color;\n }\n}\n\n.search-result-title {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 40%;\n padding-right: $sp-2;\n vertical-align: top;\n }\n}\n\n.search-result-doc {\n display: flex;\n align-items: center;\n word-wrap: break-word;\n\n &.search-result-doc-parent {\n opacity: 0.5;\n @include fs-3;\n\n @include mq(md) {\n @include fs-2;\n }\n }\n\n .search-result-icon {\n width: $sp-4;\n height: $sp-4;\n margin-right: $sp-2;\n color: $link-color;\n flex-shrink: 0;\n }\n\n .search-result-doc-title {\n overflow: auto;\n }\n}\n\n.search-result-section {\n margin-left: #{$sp-4 + $sp-2};\n word-wrap: break-word;\n}\n\n.search-result-rel-url {\n display: block;\n margin-left: #{$sp-4 + $sp-2};\n overflow: hidden;\n color: $search-result-preview-color;\n text-overflow: ellipsis;\n white-space: nowrap;\n @include fs-1;\n}\n\n.search-result-previews {\n display: block;\n padding-top: $sp-2;\n padding-bottom: $sp-2;\n padding-left: $sp-4;\n margin-left: $sp-2;\n color: $search-result-preview-color;\n word-wrap: break-word;\n border-left: $border;\n border-left-color: $border-color;\n @include fs-2;\n\n @include mq(sm) {\n display: inline-block;\n width: 60%;\n padding-left: $sp-2;\n margin-left: 0;\n vertical-align: top;\n }\n}\n\n.search-result-preview + .search-result-preview {\n margin-top: $sp-1;\n}\n\n.search-result-highlight {\n font-weight: bold;\n}\n\n.search-no-result {\n padding: $sp-2 $sp-3;\n @include fs-3;\n}\n\n.search-button {\n position: fixed;\n right: $sp-4;\n bottom: $sp-4;\n display: flex;\n width: $sp-9;\n height: $sp-9;\n background-color: $search-background-color;\n border: 1px solid rgba($link-color, 0.3);\n border-radius: #{$sp-9 * 0.5};\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n align-items: center;\n justify-content: center;\n}\n\n.search-overlay {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1;\n width: 0;\n height: 0;\n background-color: rgba(0, 0, 0, 0.3);\n opacity: 0;\n transition:\n opacity ease $transition-duration,\n width 0s $transition-duration,\n height 0s $transition-duration;\n}\n\n.search-active {\n .search {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n }\n\n .search-input-wrap {\n height: $sp-10;\n border-radius: 0;\n\n @include mq(md) {\n width: $search-results-width;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n }\n }\n\n .search-input {\n background-color: $search-background-color;\n\n @include mq(md) {\n padding-left: 2.3rem;\n }\n }\n\n .search-label {\n @include mq(md) {\n padding-left: 0.6rem;\n }\n }\n\n .search-results {\n display: block;\n }\n\n .search-overlay {\n width: 100%;\n height: 100%;\n opacity: 1;\n transition:\n opacity ease $transition-duration,\n width 0s,\n height 0s;\n }\n\n @include mq(md) {\n .main {\n position: fixed;\n right: 0;\n left: 0;\n }\n }\n\n .main-header {\n padding-top: $sp-10;\n\n @include mq(md) {\n padding-top: 0;\n }\n }\n}\n","// Tables\n// stylelint-disable max-nesting-depth, selector-no-type, selector-max-type\n\n.table-wrapper {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: $sp-5;\n overflow-x: auto;\n border-radius: $border-radius;\n box-shadow:\n 0 1px 2px rgba(0, 0, 0, 0.12),\n 0 3px 10px rgba(0, 0, 0, 0.08);\n}\n\ntable {\n display: table;\n min-width: 100%;\n border-collapse: separate;\n}\n\nth,\ntd {\n @include fs-3;\n\n min-width: 7.5rem;\n padding: $sp-2 $sp-3;\n background-color: $table-background-color;\n border-bottom: $border rgba($border-color, 0.5);\n border-left: $border $border-color;\n\n &:first-of-type {\n border-left: 0;\n }\n}\n\ntbody {\n tr {\n &:last-of-type {\n th,\n td {\n border-bottom: 0;\n }\n\n td {\n padding-bottom: $sp-3;\n }\n }\n }\n}\n\nthead {\n th {\n border-bottom: $border $border-color;\n }\n}\n","// Code and syntax highlighting\n// stylelint-disable selector-no-qualifying-type, declaration-block-semicolon-newline-after,declaration-block-single-line-max-declarations, selector-no-type, selector-max-type, scss/comment-no-empty\n\n// {% raw %}\n\n// This instruction applies to all queues not within 'pre' or 'figure', avoiding 'code' generated by the highlight.\n:not(pre, figure) {\n & > code {\n padding: 0.2em 0.15em;\n font-weight: 400;\n background-color: $code-background-color;\n border: $border $border-color;\n border-radius: $border-radius;\n }\n}\n\n// Avoid appearance of dark border around visited code links in Safari\na:visited code {\n border-color: $border-color;\n}\n\n// Content structure for highlighted code blocks using fences or Liquid\n//\n// ```[LANG]...```, no kramdown line_numbers:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n//\n// ```[LANG]...```, kramdown line_numbers = true:\n// div.[language-LANG.]highlighter-rouge > div.highlight > pre.highlight > code\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.rouge-gutter.gl > pre.lineno\n// | td.rouge-code > pre\n//\n// {% highlight LANG %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n//\n// {% highlight LANG linenos %}...{% endhighlight %}:\n// figure.highlight > pre > code.language-LANG\n// > div.table-wrapper > table.rouge-table > tbody > tr\n// > td.gutter.gl > pre.lineno\n// | td.code > pre\n//\n// ----...---- (AsciiDoc)\n// div.listingblock > div.content > pre.rouge.highlight\n//\n// fix_linenos removes the outermost pre when it encloses table.rouge-table\n//\n// See docs/index-test.md for some tests.\n//\n// No kramdown line_numbers: fences and Liquid highlighting look the same.\n// Kramdown line_numbers = true: fences have a wider gutter than with Liquid?\n\n// ```[LANG]...```\n// or in AsciiDoc:\n//\n// ----\n// ...\n// ----\n\n// the code may appear with 3 different types:\n// container \\ case: default case, code with line number, code with html rendering\n// top level: div.highlighter-rouge, figure.highlight, figure.highlight\n// second level: div.highlight, div.table-wrapper, pre.highlight\n// third level: pre.highlight, td.code, absent\n// last level: code, pre, code (optionality)\n// highlighter level: span, span, span\n// the spacing are only in the second level for case 1, 3 and in the third level for case 2\n// in AsciiDoc, there is a parent container that contains optionally a title and the content.\n\n// select top level container\ndiv.highlighter-rouge,\ndiv.listingblock > div.content,\nfigure.highlight {\n margin-top: 0;\n margin-bottom: $sp-3;\n background-color: $code-background-color;\n border-radius: $border-radius;\n box-shadow: none;\n -webkit-overflow-scrolling: touch;\n position: relative;\n padding: 0;\n\n // copy button (or other button)\n // the button appear only when there is a hover on the code or focus on button\n > button {\n width: $sp-3;\n opacity: 0;\n position: absolute;\n top: 0;\n right: 0;\n border: $sp-3 solid $code-background-color;\n background-color: $code-background-color;\n color: $body-text-color;\n box-sizing: content-box;\n\n svg {\n fill: $body-text-color;\n }\n\n &:active {\n text-decoration: none;\n outline: none;\n opacity: 1;\n }\n\n &:focus {\n opacity: 1;\n }\n }\n\n // the button can be seen by doing a simple hover in the code, there is no need to go over the location of the button\n &:hover {\n > button {\n cursor: copy;\n opacity: 1;\n }\n }\n}\n\n// setting the spacing and scrollbar on the second level for the first case\n// remove all space on the second and third level\n// this is a mixin to accommodate for the slightly different structures generated via Markdown vs AsciiDoc\n@mixin scroll-and-spacing($code-div, $pre-select) {\n #{$code-div} {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 0;\n }\n\n #{$pre-select},\n code {\n padding: 0;\n margin: 0;\n border: 0;\n }\n}\n\n// for Markdown\ndiv.highlighter-rouge {\n @include scroll-and-spacing(\"div.highlight\", \"pre.highlight\");\n}\n\n// for AsciiDoc. we also need to fix the margins for its parent container.\ndiv.listingblock {\n @include scroll-and-spacing(\"div.content\", \"div.content > pre\");\n\n margin-top: 0;\n margin-bottom: $sp-3;\n}\n\n// {% highlight LANG %}...{% endhighlight %},\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the second level for the thirt case\n// the css rule are apply only to the last code enviroment\n// setting the scroolbar\nfigure.highlight {\n pre,\n :not(pre) > code {\n overflow-x: auto;\n padding: $sp-3;\n margin: 0;\n border: 0;\n }\n}\n\n// ```[LANG]...```, kramdown line_numbers = true,\n// {% highlight LANG linenos %}...{% endhighlight %}:\n\n// setting the spacing and scrollbar on the thirt level for the second case\n.highlight .table-wrapper {\n padding: $sp-3 0;\n margin: 0;\n border: 0;\n box-shadow: none;\n\n td,\n pre {\n @include fs-2;\n\n min-width: 0;\n padding: 0;\n background-color: $code-background-color;\n border: 0;\n }\n\n td.gl {\n width: 1em;\n padding-right: $sp-3;\n padding-left: $sp-3;\n }\n\n pre {\n margin: 0;\n line-height: 2;\n }\n}\n\n// Code examples: html render of a code\n.code-example,\n.listingblock > .title {\n padding: $sp-3;\n margin-bottom: $sp-3;\n overflow: auto;\n border: 1px solid $border-color;\n border-radius: $border-radius;\n\n + .highlighter-rouge,\n + .sectionbody .listingblock,\n + .content,\n + figure.highlight {\n position: relative;\n margin-top: -$sp-4;\n border-right: 1px solid $border-color;\n border-bottom: 1px solid $border-color;\n border-left: 1px solid $border-color;\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n\n// Mermaid diagram code blocks should be left unstyled.\ncode.language-mermaid {\n padding: 0;\n background-color: inherit;\n border: 0;\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight,\npre.highlight {\n background: $code-background-color; // Code Background\n // For Backwards Compatibility Before $code-linenumber-color was added\n @if variable-exists(code-linenumber-color) {\n color: $code-linenumber-color; // Code Line Numbers\n } @else {\n color: $body-text-color; // Code Line Numbers\n }\n}\n\n// Override OneDarkJekyll Colors for Code Blocks\n.highlight pre {\n background: $code-background-color; // Code Background\n}\n\n// {% endraw %}\n","// Utility classes for colors\n\n// Text colors\n\n.text-grey-dk-000 {\n color: $grey-dk-000 !important;\n}\n\n.text-grey-dk-100 {\n color: $grey-dk-100 !important;\n}\n\n.text-grey-dk-200 {\n color: $grey-dk-200 !important;\n}\n\n.text-grey-dk-250 {\n color: $grey-dk-250 !important;\n}\n\n.text-grey-dk-300 {\n color: $grey-dk-300 !important;\n}\n\n.text-grey-lt-000 {\n color: $grey-lt-000 !important;\n}\n\n.text-grey-lt-100 {\n color: $grey-lt-100 !important;\n}\n\n.text-grey-lt-200 {\n color: $grey-lt-200 !important;\n}\n\n.text-grey-lt-300 {\n color: $grey-lt-300 !important;\n}\n\n.text-blue-000 {\n color: $blue-000 !important;\n}\n\n.text-blue-100 {\n color: $blue-100 !important;\n}\n\n.text-blue-200 {\n color: $blue-200 !important;\n}\n\n.text-blue-300 {\n color: $blue-300 !important;\n}\n\n.text-green-000 {\n color: $green-000 !important;\n}\n\n.text-green-100 {\n color: $green-100 !important;\n}\n\n.text-green-200 {\n color: $green-200 !important;\n}\n\n.text-green-300 {\n color: $green-300 !important;\n}\n\n.text-purple-000 {\n color: $purple-000 !important;\n}\n\n.text-purple-100 {\n color: $purple-100 !important;\n}\n\n.text-purple-200 {\n color: $purple-200 !important;\n}\n\n.text-purple-300 {\n color: $purple-300 !important;\n}\n\n.text-yellow-000 {\n color: $yellow-000 !important;\n}\n\n.text-yellow-100 {\n color: $yellow-100 !important;\n}\n\n.text-yellow-200 {\n color: $yellow-200 !important;\n}\n\n.text-yellow-300 {\n color: $yellow-300 !important;\n}\n\n.text-red-000 {\n color: $red-000 !important;\n}\n\n.text-red-100 {\n color: $red-100 !important;\n}\n\n.text-red-200 {\n color: $red-200 !important;\n}\n\n.text-red-300 {\n color: $red-300 !important;\n}\n\n// Background colors\n\n.bg-grey-dk-000 {\n background-color: $grey-dk-000 !important;\n}\n\n.bg-grey-dk-100 {\n background-color: $grey-dk-100 !important;\n}\n\n.bg-grey-dk-200 {\n background-color: $grey-dk-200 !important;\n}\n\n.bg-grey-dk-250 {\n background-color: $grey-dk-250 !important;\n}\n\n.bg-grey-dk-300 {\n background-color: $grey-dk-300 !important;\n}\n\n.bg-grey-lt-000 {\n background-color: $grey-lt-000 !important;\n}\n\n.bg-grey-lt-100 {\n background-color: $grey-lt-100 !important;\n}\n\n.bg-grey-lt-200 {\n background-color: $grey-lt-200 !important;\n}\n\n.bg-grey-lt-300 {\n background-color: $grey-lt-300 !important;\n}\n\n.bg-blue-000 {\n background-color: $blue-000 !important;\n}\n\n.bg-blue-100 {\n background-color: $blue-100 !important;\n}\n\n.bg-blue-200 {\n background-color: $blue-200 !important;\n}\n\n.bg-blue-300 {\n background-color: $blue-300 !important;\n}\n\n.bg-green-000 {\n background-color: $green-000 !important;\n}\n\n.bg-green-100 {\n background-color: $green-100 !important;\n}\n\n.bg-green-200 {\n background-color: $green-200 !important;\n}\n\n.bg-green-300 {\n background-color: $green-300 !important;\n}\n\n.bg-purple-000 {\n background-color: $purple-000 !important;\n}\n\n.bg-purple-100 {\n background-color: $purple-100 !important;\n}\n\n.bg-purple-200 {\n background-color: $purple-200 !important;\n}\n\n.bg-purple-300 {\n background-color: $purple-300 !important;\n}\n\n.bg-yellow-000 {\n background-color: $yellow-000 !important;\n}\n\n.bg-yellow-100 {\n background-color: $yellow-100 !important;\n}\n\n.bg-yellow-200 {\n background-color: $yellow-200 !important;\n}\n\n.bg-yellow-300 {\n background-color: $yellow-300 !important;\n}\n\n.bg-red-000 {\n background-color: $red-000 !important;\n}\n\n.bg-red-100 {\n background-color: $red-100 !important;\n}\n\n.bg-red-200 {\n background-color: $red-200 !important;\n}\n\n.bg-red-300 {\n background-color: $red-300 !important;\n}\n","// Utility classes for layout\n\n// Display\n\n.d-block {\n display: block !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .d-sm-block, .d-md-none, .d-lg-inline\n .d-#{$media-query}-block {\n display: block !important;\n }\n .d-#{$media-query}-flex {\n display: flex !important;\n }\n .d-#{$media-query}-inline {\n display: inline !important;\n }\n .d-#{$media-query}-inline-block {\n display: inline-block !important;\n }\n .d-#{$media-query}-none {\n display: none !important;\n }\n }\n }\n}\n\n// Horizontal alignment\n\n.float-left {\n float: left !important;\n}\n\n.float-right {\n float: right !important;\n}\n\n.flex-justify-start {\n justify-content: flex-start !important;\n}\n\n.flex-justify-end {\n justify-content: flex-end !important;\n}\n\n.flex-justify-between {\n justify-content: space-between !important;\n}\n\n.flex-justify-around {\n justify-content: space-around !important;\n}\n\n// Vertical alignment\n\n.v-align-baseline {\n vertical-align: baseline !important;\n}\n\n.v-align-bottom {\n vertical-align: bottom !important;\n}\n\n.v-align-middle {\n vertical-align: middle !important;\n}\n\n.v-align-text-bottom {\n vertical-align: text-bottom !important;\n}\n\n.v-align-text-top {\n vertical-align: text-top !important;\n}\n\n.v-align-top {\n vertical-align: top !important;\n}\n","// Utility classes for typography\n\n.fs-1 {\n @include fs-1;\n}\n\n.fs-2 {\n @include fs-2;\n}\n\n.fs-3 {\n @include fs-3;\n}\n\n.fs-4 {\n @include fs-4;\n}\n\n.fs-5 {\n @include fs-5;\n}\n\n.fs-6 {\n @include fs-6;\n}\n\n.fs-7 {\n @include fs-7;\n}\n\n.fs-8 {\n @include fs-8;\n}\n\n.fs-9 {\n @include fs-9;\n}\n\n.fs-10 {\n @include fs-10;\n}\n\n.fw-300 {\n font-weight: 300 !important;\n}\n\n.fw-400 {\n font-weight: 400 !important;\n}\n\n.fw-500 {\n font-weight: 500 !important;\n}\n\n.fw-700 {\n font-weight: 700 !important;\n}\n\n.lh-0 {\n line-height: 0 !important;\n}\n\n.lh-default {\n line-height: $body-line-height;\n}\n\n.lh-tight {\n line-height: $body-heading-line-height;\n}\n\n.ls-5 {\n letter-spacing: 0.05em !important;\n}\n\n.ls-10 {\n letter-spacing: 0.1em !important;\n}\n\n.ls-0 {\n letter-spacing: 0 !important;\n}\n\n.text-uppercase {\n text-transform: uppercase !important;\n}\n","// Utility classes for lists\n\n// stylelint-disable selector-max-type\n\n.list-style-none {\n padding: 0 !important;\n margin: 0 !important;\n list-style: none !important;\n\n li {\n &::before {\n display: none !important;\n }\n }\n}\n","// Utility classes for margins and padding\n\n// stylelint-disable block-opening-brace-space-after, block-opening-brace-space-before\n\n// Margin spacer utilities\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-0, .m-1, .m-2...\n .m-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n .mx-#{$scale}-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @for $i from 1 through length($spacers) {\n @include mq($media-query) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .m-sm-0, .m-md-1, .m-lg-2...\n .m-#{$media-query}-#{$scale} {\n margin: #{$size} !important;\n }\n .mt-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n }\n .mr-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n }\n .mb-#{$media-query}-#{$scale} {\n margin-bottom: #{$size} !important;\n }\n .ml-#{$media-query}-#{$scale} {\n margin-left: #{$size} !important;\n }\n\n .mx-#{$media-query}-#{$scale} {\n margin-right: #{$size} !important;\n margin-left: #{$size} !important;\n }\n\n .my-#{$media-query}-#{$scale} {\n margin-top: #{$size} !important;\n margin-bottom: #{$size} !important;\n }\n\n .mxn-#{$media-query}-#{$scale} {\n margin-right: -#{$size} !important;\n margin-left: -#{$size} !important;\n }\n }\n }\n}\n\n// Padding spacer utilities\n\n@for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-0, .p-1, .p-2...\n .p-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n}\n\n@each $media-query in map-keys($media-queries) {\n @include mq($media-query) {\n @for $i from 1 through length($spacers) {\n $size: #{map-get($spacers, sp-#{$i - 1})};\n $scale: #{$i - 1};\n\n // .p-sm-0, .p-md-1, .p-lg-2...\n .p-#{$media-query}-#{$scale} {\n padding: #{$size} !important;\n }\n .pt-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n }\n .pr-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n }\n .pb-#{$media-query}-#{$scale} {\n padding-bottom: #{$size} !important;\n }\n .pl-#{$media-query}-#{$scale} {\n padding-left: #{$size} !important;\n }\n\n .px-#{$media-query}-#{$scale} {\n padding-right: #{$size} !important;\n padding-left: #{$size} !important;\n }\n\n .py-#{$media-query}-#{$scale} {\n padding-top: #{$size} !important;\n padding-bottom: #{$size} !important;\n }\n }\n }\n}\n","// stylelint-disable selector-max-specificity, selector-max-id, selector-max-type, selector-no-qualifying-type\n\n@media print {\n .site-footer,\n .site-button,\n #edit-this-page,\n #back-to-top,\n .site-nav,\n .main-header {\n display: none !important;\n }\n\n .side-bar {\n width: 100%;\n height: auto;\n border-right: 0 !important;\n }\n\n .site-header {\n border-bottom: 1px solid $border-color;\n }\n\n .site-title {\n font-size: 1rem !important;\n font-weight: 700 !important;\n }\n\n .text-small {\n font-size: 8pt !important;\n }\n\n pre.highlight {\n border: 1px solid $border-color;\n }\n\n .main {\n max-width: none;\n margin-left: 0;\n }\n}\n","// Skipnav\n// Skip to main content\n\na.skip-to-main {\n left: -999px;\n position: absolute;\n top: auto;\n width: 1px;\n height: 1px;\n overflow: hidden;\n z-index: -999;\n}\n\na.skip-to-main:focus,\na.skip-to-main:active {\n color: $link-color;\n background-color: $body-background-color;\n left: auto;\n top: auto;\n width: 30%;\n height: auto;\n overflow: auto;\n margin: 10px 35%;\n padding: 5px;\n border-radius: 15px;\n border: 4px solid $btn-primary-color;\n text-align: center;\n font-size: 1.2em;\n z-index: 999;\n}\n","\n$logo: \"/assets/images/logo.png\";\n\n@import \"./support/support\";\n@import \"./custom/setup\";\n@import \"./color_schemes/light\";\n\n@import \"./modules\";\ndiv.opaque {\n background-color: $body-background-color;\n}p.warning, blockquote.warning {\n background: rgba($yellow-000, 0.2);\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $yellow-300;\n content: \"Warning\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .warning-title {\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.warning-title, blockquote.warning-title {\n background: rgba($yellow-000, 0.2);\n border-left: $border-radius solid $yellow-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $yellow-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.warning {\n margin-left: 0;\n margin-right: 0;\n \n > p:first-child {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.warning-title {\n margin-left: 0;\n margin-right: 0;\n \n > p:nth-child(2) {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\np.danger, blockquote.danger {\n background: rgba($red-000, 0.2);\n border-left: $border-radius solid $red-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $red-300;\n content: \"Danger\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .danger-title {\n color: $red-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.danger-title, blockquote.danger-title {\n background: rgba($red-000, 0.2);\n border-left: $border-radius solid $red-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $red-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.danger {\n margin-left: 0;\n margin-right: 0;\n \n > p:first-child {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.danger-title {\n margin-left: 0;\n margin-right: 0;\n \n > p:nth-child(2) {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\np.note, blockquote.note {\n background: rgba($iueblue-000, 0.2);\n border-left: $border-radius solid $iueblue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n \n &::before {\n color: $iueblue-300;\n content: \"Note\";\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n \n > .note-title {\n color: $iueblue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\np.note-title, blockquote.note-title {\n background: rgba($iueblue-000, 0.2);\n border-left: $border-radius solid $iueblue-300;\n border-radius: $border-radius;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.12), 0 3px 10px rgba(0, 0, 0, 0.08);\n padding: .8rem;\n > p:first-child {\n margin-top: 0;\n margin-bottom: 0;\n color: $iueblue-300;\n display: block;\n font-weight: bold;\n text-transform: uppercase;\n font-size: .75em;\n padding-bottom: .125rem;\n }\n}\n\nblockquote.note {\n margin-left: 0;\n margin-right: 0;\n \n > p:first-child {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\nblockquote.note-title {\n margin-left: 0;\n margin-right: 0;\n \n > p:nth-child(2) {\n margin-top: 0;\n }\n \n > p:last-child {\n margin-bottom: 0;\n }\n}\n\n\n@import \"./custom/custom\";\n\n\n","$iueblue-000: #005077;\n$iueblue-100: #005077;\n$iueblue-200: #005077;\n$iueblue-300: #005077;"],"file":"just-the-docs-light.css"} \ No newline at end of file diff --git a/docs/_site/assets/js/search-data.json b/docs/_site/assets/js/search-data.json index 73ba5ae1..5886a1f5 100644 --- a/docs/_site/assets/js/search-data.json +++ b/docs/_site/assets/js/search-data.json @@ -1,31 +1,31 @@ {"0": { "doc": "SF6O2 Etching", "title": "SF6O2 Etching", - "content": "#include <psSF6O2Etching.hpp> . The model for SF6O2 etching of silicon is based on a model by Belen et al. 1 and summarized here. For implementation details refer to here. To describe the feature scale simulation of SF6O2 plasma etching, the surface rates of both ions and neutral particles, specifically fluorine and oxygen, and the surface coverages of neutrals, are considered. Ray tracing is used for the calculation of the surface rates, which are used for calculating coverages during each time step. The etch rate is determined the three physical phenomena: . | Chemical etching | Physical sputtering | Ion-enhanced etching | . In the process of chemical etching, the fluorine from the SF6 species reacts with the exposed silicon surface. Physical sputtering is caused by high-energy ions impacting the surface. Due to an applied bias, ions strike the wafer surface with a high enough kinetic energy, $E_{ion} > E_{th}$ to break the existing bonds in the silicon wafer or other exposed materials. Lastly, ion-enhanced etching, also known as reactive ion etching (RIE), combines the two previous effects. Since silicon surfaces that are saturated with fluorine are more prone to physical sputtering, the threshold energy for releasing the silicon atom $E_{th}$ is significantly reduced compared to non-fluorinated surfaces. Therefore, ion-enhanced etching provides an etch rate that is larger than the sum of the chemical etching and sputtering. The surface can be covered in fluorine or oxygen. The physical model keeps track of these coverages, given by $\\theta_F$ and $\\theta_O$, respectively, by calculating the flux-induced rates and considering the coverages from the previous time step. They are calculated with Langmuir–Hinshelwood-type surface site balance equations, given by: . \\begin{equation} \\sigma_{Si}\\cfrac{d\\theta_{F}}{dt}=\\gamma_{F}\\Gamma_{F}\\left(1-\\theta_{F}-\\theta_{O}\\right)-k\\sigma_{Si}\\theta_{F}-2Y_{ie}\\Gamma_{i}\\theta_{F} \\label{equ:thetaF} \\end{equation} . \\begin{equation} \\sigma_{Si}\\cfrac{d\\theta_{O}}{dt}=\\gamma_{O}\\Gamma_{O}\\left(1-\\theta_{F}-\\theta_{O}\\right)-\\beta\\sigma_{Si}\\theta_{O}-Y_{O}\\Gamma_{i}\\theta_{O} \\label{equ:thetaO} \\end{equation} . The term $\\sigma_{Si}$ represents the density of silicon at the surface point $\\vec{x}$ which is not included in the equations for legibility; $\\Gamma_F$, $\\Gamma_O$, and $\\Gamma_i$ are the emitted fluorine, oxygen, and ion fluxes, respectively; $\\gamma_F$ and $\\gamma_O$ are the sticking coefficients for fluorine and oxygen on a non-covered silicon substrate, respectively; $k$ is the chemical etch reaction rate constant; $\\beta$ is the oxygen recombination rate constant; and $Y_{ie}$ and $Y_O$ are the total ion-enhanced and oxygen etching yields, respectively. $Y_{ie}$ and $Y_O$ are yield functions that are dependent on the ion energies in the reactor. Since the surface movement is significantly smaller than the considered fluxes, it can be assumed that it does not impact the calculation. With this assumption of a pseudo-steady-state, the coverage equations can be set equal to zero, resulting in the following surface coverage equations: \\begin{equation} \\theta_{F}=\\left[1+\\left(\\cfrac{k\\sigma_{Si}+2Y_{ie}\\Gamma_{i}}{\\gamma_{F}\\Gamma_{F}}\\right)\\left(1+\\cfrac{\\gamma_{O}\\Gamma_{O}}{\\beta\\sigma_{Si}+Y_{O}\\Gamma_{i}}\\right)\\right]^{-1} \\end{equation} . \\begin{equation} \\theta_{O}=\\left[1+\\left(\\cfrac{\\beta\\sigma_{Si}+Y_{O}\\Gamma_{i}}{\\gamma_{O}\\Gamma_{O}}\\right)\\left(1+\\cfrac{\\gamma_{F}\\Gamma_{F}}{k\\sigma_{Si}+2Y_{ie}\\Gamma_{i}}\\right)\\right]^{-1} \\end{equation} . The reason that pseudo-steady-state can be assumed is that the incoming fluxes of all involved particles are in the order of 10$^{16}$–10$^{19}$ cm-1s-1, which is significantly larger than the surface etch rate ER, which is typically in the range of several nanometers per second. The oxygen particles do not take part in surface removal; instead, they occupy an area on the top surface layer and inhibit the effects of chemical etching by fluorine. Relating it to the parameters in the equation, the presence of oxygen (denoted by its flux $\\Gamma_{O}$) tends to reduce $\\theta_{F}$. Increasing the oxygen flux $\\Gamma_O$ increases the overall expression in the square brackets, which means $\\theta_{F}$ decreases. Since oxygen has a passivating effect, the etching of silicon proceeds only due to its reaction with fluorine and physical sputtering due to the incoming ion flux. At locations where oxygen coverage is high, only ion sputtering takes place. This brings us to the expression for the etch rate (ER), which is used to move the surface . \\begin{equation} \\textrm{ER}=\\cfrac{1}{\\rho_{Si}}\\left(\\cfrac{k\\sigma_{Si}\\theta_{F}}{4}+Y_{p}\\Gamma_{i}+Y_{ie}\\Gamma_{i}\\theta_{F}\\right), \\end{equation} where $\\rho_{Si}$ is the silicon density. The first, second, and third terms in the brackets of the etch rate equation represent the chemical etching, physical sputtering, and ion-enhanced etching, respectively. ", + "content": "#include <psSF6O2Etching.hpp> . The model for SF6O2 etching of silicon is based on a model by Belen et al. 1 and summarized here. For implementation details refer to here. To describe the feature scale simulation of SF6O2 plasma etching, the surface rates of both ions and neutral particles, specifically fluorine and oxygen, and the surface coverages of neutrals, are considered. Ray tracing is used for the calculation of the surface rates, which are used for calculating coverages during each time step. The etch rate is determined the three physical phenomena: . | Chemical etching | Physical sputtering | Ion-enhanced etching | . In the process of chemical etching, the fluorine from the SF6 species reacts with the exposed silicon surface. Physical sputtering is caused by high-energy ions impacting the surface. Due to an applied bias, ions strike the wafer surface with a high enough kinetic energy, $E_{ion} > E_{th}$ to break the existing bonds in the silicon wafer or other exposed materials. Lastly, ion-enhanced etching, also known as reactive ion etching (RIE), combines the two previous effects. Since silicon surfaces that are saturated with fluorine are more prone to physical sputtering, the threshold energy for releasing the silicon atom $E_{th}$ is significantly reduced compared to non-fluorinated surfaces. Therefore, ion-enhanced etching provides an etch rate that is larger than the sum of the chemical etching and sputtering. The surface can be covered in fluorine or oxygen. The physical model keeps track of these coverages, given by $\\theta_F$ and $\\theta_O$, respectively, by calculating the flux-induced rates and considering the coverages from the previous time step. They are calculated with Langmuir–Hinshelwood-type surface site balance equations, given by: . \\begin{equation} \\sigma_{Si}\\cfrac{d\\theta_{F}}{dt}=\\beta_{F}\\Gamma_{F}\\left(1-\\theta_{F}-\\theta_{O}\\right)-k\\sigma_{Si}\\theta_{F}-2Y_{ie}\\Gamma_{i}\\theta_{F} \\label{equ:thetaF} \\end{equation} . \\begin{equation} \\sigma_{Si}\\cfrac{d\\theta_{O}}{dt}=\\beta_{O}\\Gamma_{O}\\left(1-\\theta_{F}-\\theta_{O}\\right)-\\beta\\sigma_{Si}\\theta_{O}-Y_{O}\\Gamma_{i}\\theta_{O} \\label{equ:thetaO} \\end{equation} . The term $\\sigma_{Si}$ represents the density of silicon at the surface point $\\vec{x}$ which is not included in the equations for legibility; $\\Gamma_F$, $\\Gamma_O$, and $\\Gamma_i$ are the emitted fluorine, oxygen, and ion fluxes, respectively; $\\beta_F$ and $\\beta_O$ are the sticking coefficients for fluorine and oxygen on a non-covered silicon substrate, respectively; $k$ is the chemical etch reaction rate constant; $\\beta$ is the oxygen recombination rate constant; and $Y_{ie}$ and $Y_O$ are the total ion-enhanced and oxygen etching yields, respectively. $Y_{ie}$ and $Y_O$ are yield functions that are dependent on the ion energies in the reactor. Since the surface movement is significantly smaller than the considered fluxes, it can be assumed that it does not impact the calculation. With this assumption of a pseudo-steady-state, the coverage equations can be set equal to zero, resulting in the following surface coverage equations: \\begin{equation} \\theta_{F}=\\left[1+\\left(\\cfrac{k\\sigma_{Si}+2Y_{ie}\\Gamma_{i}}{\\gamma_{F}\\Gamma_{F}}\\right)\\left(1+\\cfrac{\\gamma_{O}\\Gamma_{O}}{\\beta\\sigma_{Si}+Y_{O}\\Gamma_{i}}\\right)\\right]^{-1} \\end{equation} . \\begin{equation} \\theta_{O}=\\left[1+\\left(\\cfrac{\\beta\\sigma_{Si}+Y_{O}\\Gamma_{i}}{\\gamma_{O}\\Gamma_{O}}\\right)\\left(1+\\cfrac{\\gamma_{F}\\Gamma_{F}}{k\\sigma_{Si}+2Y_{ie}\\Gamma_{i}}\\right)\\right]^{-1} \\end{equation} . The reason that pseudo-steady-state can be assumed is that the incoming fluxes of all involved particles are in the order of 10$^{16}$–10$^{19}$ cm-1s-1, which is significantly larger than the surface etch rate ER, which is typically in the range of several nanometers per second. The oxygen particles do not take part in surface removal; instead, they occupy an area on the top surface layer and inhibit the effects of chemical etching by fluorine. Relating it to the parameters in the equation, the presence of oxygen (denoted by its flux $\\Gamma_{O}$) tends to reduce $\\theta_{F}$. Increasing the oxygen flux $\\Gamma_O$ increases the overall expression in the square brackets, which means $\\theta_{F}$ decreases. Since oxygen has a passivating effect, the etching of silicon proceeds only due to its reaction with fluorine and physical sputtering due to the incoming ion flux. At locations where oxygen coverage is high, only ion sputtering takes place. This brings us to the expression for the etch rate (ER), which is used to move the surface . \\begin{equation} \\textrm{ER}=\\cfrac{1}{\\rho_{Si}}\\left(\\cfrac{k\\sigma_{Si}\\theta_{F}}{4}+Y_{p}\\Gamma_{i}+Y_{ie}\\Gamma_{i}\\theta_{F}\\right), \\end{equation} where $\\rho_{Si}$ is the silicon density. The first, second, and third terms in the brackets of the etch rate equation represent the chemical etching, physical sputtering, and ion-enhanced etching, respectively. ", "url": "/models/prebuilt/SF6O2Etching.html#sf6o2-etching", "relUrl": "/models/prebuilt/SF6O2Etching.html#sf6o2-etching" },"1": { "doc": "SF6O2 Etching", "title": "Ions", - "content": "Each ion is endowed with an initial energy and direction upon creation on the source plane. The assignment of initial energies is governed by a normal distribution, characterized by a mean energy value and an energy sigma, thus allowing for stochastic variations in the initial energy states of the ions. The distribution of initial ion directions is given by a power cosine source distribution, which is defined by the exponent of the power cosine distribution. Upon impact with the surface, an energy- and angle-dependent yield is computed, which contributes to the specific surface point’s rate. The yield is expressed as: \\begin{equation} Y(E,\\theta) = A\\left(\\sqrt{E} - \\sqrt{E_{th}}\\right)f(\\theta), \\end{equation} where $E$ denotes the particle energy and $\\theta$ its incident angle. Here, $A$ represents a yield coefficient, and $E_{\\text{th}}$ denotes the material’s threshold energy for physical sputtering. The function $f(\\theta)$, which characterizes the angle-dependence of the yield. For sputtering, the function is given by: \\begin{equation} f(\\theta) = (1 + B_{sp}(1-\\cos^2(\\theta)))\\cos(\\theta), \\end{equation} while for ion-enhanced etching, the function is given by: \\begin{equation} f(\\theta) = \\cos(\\theta). \\end{equation} . The ions can also reflect from the surface. Their energy loss during reflection is described by the model proposed by Belen et al 1. The current ray energy is multiplied by a factor $E_\\textrm{ref}$ ($0 \\leq E_\\textrm{ref} \\leq 1$) which depends on the incoming angle $\\theta$ in the following way: \\begin{equation} E_{\\textrm{ref}}= 1-(1-A)\\frac{\\frac{\\pi}{2}-\\theta}{\\frac{\\pi}{2}-\\theta_\\textrm{inflect}} \\quad \\text{ if } \\theta \\geqslant \\theta_\\textrm{inflect} \\end{equation} \\begin{equation} E_{\\textrm{ref}}=\\mathrm{A}\\left(\\frac{\\theta}{\\theta_\\textrm{inflect}}\\right)^{n_l} \\quad \\text{ if } \\theta<\\theta_\\textrm{inflect}, \\end{equation} where $A = (1 + n(\\frac{\\pi}{2 \\theta_\\textrm{inflect}} - 1))^{-1}$. Ions striking the surface at an angle denoted by $\\theta$ relative to the surface normal undergo reflection, where the angular dispersion is characterized by a cosine function centered around the direction of specular reflection defined by $\\theta_\\textrm{spec}$. This reflection process distinguishes between ions approaching the surface at glancing angles, which undergo nearly perfect specular reflection, and those striking the surface perpendicularly, which undergo nearly diffuse reflection. \\begin{equation} \\mathrm{P}(\\phi) \\propto \\cos \\left(\\frac{\\pi}{2} \\frac{\\phi}{\\frac{\\pi}{2}-\\theta_\\textrm{spec}}\\right) \\quad \\text{ if } \\theta_\\textrm{inc} \\leqslant \\theta_\\textrm{min} \\end{equation} . \\begin{equation} \\mathrm{P}(\\phi) \\propto \\cos \\left(\\frac{\\pi}{2} \\frac{\\phi}{\\frac{\\pi}{2}-\\theta_\\textrm{min}}\\right) \\quad \\text{ if } \\theta_{\\textrm{inc}}>\\theta_{\\textrm{min}} \\end{equation} . The ray’s reflected direction is randomly chosen from a cone around the specular direction. The opening angle of this cone is given by the incidence angle $\\theta$. ", + "content": "Each ion is endowed with an initial energy and direction upon creation on the source plane. The assignment of initial energies is governed by a normal distribution, characterized by a mean energy value and an energy sigma, thus allowing for stochastic variations in the initial energy states of the ions. The distribution of initial ion directions is given by a power cosine source distribution, which is defined by the exponent of the power cosine distribution. Upon impact with the surface, an energy- and angle-dependent yield is computed, which contributes to the specific surface point’s rate. The yield is expressed as: \\begin{equation} Y(E,\\theta) = A\\left(\\sqrt{E} - \\sqrt{E_{th}}\\right)f(\\theta), \\end{equation} where $E$ denotes the particle energy and $\\theta$ its incident angle. Here, $A$ represents a yield coefficient, and $E_{\\text{th}}$ denotes the material’s threshold energy for physical sputtering. The function $f(\\theta)$, which characterizes the angle-dependence of the yield. For sputtering, the function is given by: \\begin{equation} f(\\theta) = (1 + B_{sp}(1-\\cos^2(\\theta)))\\cos(\\theta), \\end{equation} while for ion-enhanced etching, the function is given by: \\begin{equation} f(\\theta) = \\cos(\\theta). \\end{equation} . The ions can also reflect from the surface. Their energy loss during reflection is described by the model proposed by Belen et al 1. The current ray energy is multiplied by a factor $E_\\textrm{ref}$ ($0 \\leq E_\\textrm{ref} \\leq 1$) which depends on the incoming angle $\\theta$ in the following way: \\begin{equation} E_{\\textrm{ref}}= 1-(1-A)\\frac{\\frac{\\pi}{2}-\\theta}{\\frac{\\pi}{2}-\\theta_\\textrm{inflect}} \\quad \\text{ if } \\theta \\geqslant \\theta_\\textrm{inflect} \\end{equation} \\begin{equation} E_{\\textrm{ref}}=\\mathrm{A}\\left(\\frac{\\theta}{\\theta_\\textrm{inflect}}\\right)^{n_l} \\quad \\text{ if } \\theta<\\theta_\\textrm{inflect}, \\end{equation} where $A = (1 + n(\\frac{\\pi}{2 \\theta_\\textrm{inflect}} - 1))^{-1}$. Ions striking the surface at an angle denoted by $\\theta$ relative to the surface normal undergo reflection, where the angular dispersion is characterized by a cosine function centered around the direction of specular reflection defined by $\\theta_\\textrm{spec}$. This reflection process distinguishes between ions approaching the surface at glancing angles, which undergo nearly perfect specular reflection, and those striking the surface perpendicularly, which undergo nearly diffuse reflection. \\begin{equation} \\mathrm{P}(\\phi) \\propto \\cos \\left(\\frac{\\pi}{2} \\frac{\\phi}{\\frac{\\pi}{2}-\\theta_\\textrm{spec}}\\right) \\quad \\text{ if } \\theta_\\textrm{inc} \\leqslant \\theta_\\textrm{min} \\end{equation} . \\begin{equation} \\mathrm{P}(\\phi) \\propto \\cos \\left(\\frac{\\pi}{2} \\frac{\\phi}{\\frac{\\pi}{2}-\\theta_\\textrm{min}}\\right) \\quad \\text{ if } \\theta_{\\textrm{inc}}>\\theta_{\\textrm{min}} \\end{equation} . The ray’s reflected direction is randomly chosen from a cone around the specular direction. The opening angle of this cone is given by the incidence angle $\\theta$. The ions sticking probability is described by two parameters $\\theta_\\textrm{Rmin}$ and $\\theta_\\textrm{Rmax}$: \\begin{equation} \\beta_{ion} = 1 \\quad \\text{ if }\\theta \\leq \\theta_\\textrm{Rmin} \\end{equation} \\begin{equation} \\beta_{ion} = 1 - \\frac{\\theta - \\theta_\\textrm{Rmin}}{\\theta_\\textrm{Rmax}- \\theta_\\textrm{Rmin}} \\quad \\text{ if }\\theta > \\theta_\\textrm{Rmin} \\end{equation} . ", "url": "/models/prebuilt/SF6O2Etching.html#ions", "relUrl": "/models/prebuilt/SF6O2Etching.html#ions" },"2": { "doc": "SF6O2 Etching", - "title": "Implementation", - "content": "SF6O2Etching(const double ionFlux, const double etchantFlux, const double oxygenFlux, const NumericType meanEnergy /* eV */, const NumericType sigmaEnergy /* eV */, const NumericType ionExponent = 100., const NumericType oxySputterYield = 2., const NumericType etchStopDepth = std::numeric_limits<NumericType>::lowest()) . Time and length units have to be set before initializing the model. For details see Units. | Parameter | Description | Type | . | ionFlux | Ion flux for the SF6O2 etching process. | double | . | etchantFlux | Etchant flux for the SF6O2 etching process. | double | . | oxygenFlux | Oxygen flux for the SF6O2 etching process. | double | . | meanEnergy | Mean energy of ions (eV). | NumericType | . | sigmaEnergy | Energy distribution standard deviation (eV). | NumericType | . | ionExponent | (Optional) Exponent in the power cosine source distribution of ions for initial directions. Default is set to 100. | NumericType | . | oxySputterYield | (Optional) Oxygen sputtering yield. Default is set to 2. | NumericType | . | etchStopDepth | (Optional) Depth at which etching should stop. Default is negative infinity. | NumericType | . All flux values are units 1015 / cm2 /s2 . Alternatively, users can access and modify all detailed parameters by retrieving the parameter struct, which encapsulates the following values: . | Parameter | Description | Default Value | . | ionFlux | Ion flux (1015 /cm² /s) | 12.0 | . | etchantFlux | Etchant flux (1015 /cm² /s) | 1800.0 | . | oxygenFlux | Oxygen flux (1015 /cm² /s) | 100.0 | . | etchStopDepth | Depth at which etching stops | -inf | . | beta_F | Sticking probability for fluorine | 0.7 | . | beta_O | Sticking probability for oxygen | 1.0 | . | Mask.rho | Mask density (1022 atoms/cm³) | 500.0 | . | Mask.beta_F | Mask sticking probability for fluorine | 0.01 | . | Mask.beta_O | Mask sticking probability for oxygen | 0.1 | . | Mask.Eth_sp | Mask sputtering threshold energy (eV) | 20.0 | . | Mask.A_sp | Mask sputtering coefficient | 0.0139 | . | Mask.B_sp | Mask sputtering coefficient | 9.3 | . | Si.rho | Silicon density (1022 atoms/cm³) | 5.02 | . | Si.Eth_sp | Silicon sputtering threshold energy (eV) | 20.0 | . | Si.Eth_ie | Silicon ion enhanced etching threshold energy (eV) | 4.0 | . | Si.A_sp | Silicon sputtering coefficient | 0.0337 | . | Si.B_sp | Silicon sputtering coefficient | 9.3 | . | Si.A_ie | Silicon ion enhanced etching coefficient | 0.0361 | . | Si.k_sigma | Silicon chemical etch rate coefficient (1015 /cm² /s) | 300. | . | Si.beta_sigma | Silicon oxygen recombination coefficient (1015 /cm² /s) | 0.05 | . | Passivation.Eth_ie | Passivation ion enhanced etching threshold energy (eV) | 4.0 | . | Passivation.A_ie | Passivation ion enhanced etching coefficient | 0.0361 | . | Ions.meanEnergy | Mean ion energy (eV) | 100.0 | . | Ions.sigmaEnergy | Standard deviation of ion energy (eV) | 10.0 | . | Ions.exponent | Exponent of power cosine source distribution of initial ion directions | 500.0 | . | Ions.inflectAngle | Inflection angle (rad) | 1.55334303 | . | Ions.n_l | Exponent of reflection power | 10.0 | . | Ions.minAngle | Minimum cone angle for ion reflection | 1.3962634 | . Example usage: . C++ . // namespace viennaps ... auto model = SmartPointer<SF6O2Etching<NumericType, D>>::New(); auto &parameters = model->getParameters(); parameters.ionFlux = 10.; parameters.Mask.rho = 500.; // this modifies a direct reference of the parameters ... Python ... model = vps.SF6O2Etching() parameters = model.getParameters() parameters.ionFlux = 10. parameters.Mask.rho = 500. # this modifies a direct reference of the parameters ... ", - "url": "/models/prebuilt/SF6O2Etching.html#implementation", + "title": "Neutrals", + "content": "There are two neutral particle species in this model: etchant (Flourine) and oxygen. The sticking probability is a function of the surface coverage and the sticking probability of the respective particle. The sticking probability is given by: \\begin{equation} \\beta_{eff_{F/O}} = \\beta_{F/O} (1 - \\theta_F - \\theta_O) \\end{equation} Neutrals reflect diffusely from the surface with a cosine distribution. ", + "url": "/models/prebuilt/SF6O2Etching.html#neutrals", - "relUrl": "/models/prebuilt/SF6O2Etching.html#implementation" + "relUrl": "/models/prebuilt/SF6O2Etching.html#neutrals" },"3": { "doc": "SF6O2 Etching", - "title": "SF6 Etching", - "content": "The SF6 etching model is a simplified version of the SF6O2 etching model. The model only considers the etching of silicon by fluorine ions. The model is based on the same principles as the SF6O2 etching model, but without the presence of oxygen. The model is implemented in the same way as the SF6O2 etching model, but with the following parameters: . SF6Etching(const double ionFlux, const double etchantFlux, const NumericType meanEnergy /* eV */, const NumericType sigmaEnergy /* eV */, // 5 parameters const NumericType ionExponent = 300., const NumericType etchStopDepth = std::numeric_limits<NumericType>::lowest()) . | Parameter | Description | Type | . | ionFlux | Ion flux for the SF6 etching process. | double | . | etchantFlux | Etchant flux for the SF6 etching process. | double | . | meanEnergy | Mean energy of ions (eV). | NumericType | . | sigmaEnergy | Energy distribution standard deviation (eV). | NumericType | . | ionExponent | (Optional) Exponent in the power cosine source distribution of ions for initial directions. Default is set to 300. | NumericType | . | etchStopDepth | (Optional) Depth at which etching should stop. Default is negative infinity. | NumericType | . All flux values are units 1015 / cm2 /s2 . The detailed parameters can be accessed and modified in the same way as for the SF6O2 etching model. ", - "url": "/models/prebuilt/SF6O2Etching.html#sf6-etching", + "title": "Implementation", + "content": "Time and length units have to be set before initializing the model. For details see Units. SF6O2Etching() // use default values only SF6O2Etching(const double ionFlux, const double etchantFlux, const double oxygenFlux, const NumericType meanEnergy /* eV */, const NumericType sigmaEnergy /* eV */, const NumericType ionExponent = 100., const NumericType oxySputterYield = 2., const NumericType etchStopDepth = std::numeric_limits<NumericType>::lowest()) SF6O2Etching(const SF6O2Parameters<NumericType> &parameters) . Users can access and modify all detailed parameters by creating a SF6O2Parameters struct, which encapsulates the following values: . All flux values are units 1015 / cm2 /s2. | Parameter | Description | Default Value | . | ionFlux | Ion flux | 12.0 | . | etchantFlux | Etchant flux | 1800.0 | . | oxygenFlux | Oxygen flux | 100.0 | . | beta_F | Sticking probability map for fluorine | 0.7 (on Si and Mask) | . | beta_O | Sticking probability map for oxygen | 1.0 (on Si and Mask) | . | etchStopDepth | Depth at which etching stops | -inf | . | fluxIncludeSticking | Include the effective sticking probability when accumlating fluxes, Required more iterations to reach coverage convergence | false | . | Mask.rho | Mask density (1022 atoms/cm³) | 500.0 | . | Mask.Eth_sp | Mask sputtering threshold energy (eV) | 20.0 | . | Mask.A_sp | Mask sputtering coefficient | 0.0139 | . | Mask.B_sp | Mask sputtering coefficient | 9.3 | . | Si.rho | Silicon density (1022 atoms/cm³) | 5.02 | . | Si.Eth_sp | Silicon sputtering threshold energy (eV) | 20.0 | . | Si.Eth_ie | Silicon ion enhanced etching threshold energy (eV) | 15.0 | . | Si.A_sp | Silicon sputtering coefficient | 0.0337 | . | Si.B_sp | Silicon sputtering coefficient | 9.3 | . | Si.A_ie | Silicon ion enhanced etching coefficient | 7.0 | . | Si.k_sigma | Silicon chemical etch rate coefficient (1015 /cm² /s) | 300. | . | Si.beta_sigma | Silicon oxygen recombination coefficient (1015 /cm² /s) | 0.05 | . | Passivation.Eth_ie | Passivation ion enhanced etching threshold energy (eV) | 10.0 | . | Passivation.A_ie | Passivation ion enhanced etching coefficient | 3.0 | . | Ions.meanEnergy | Mean ion energy (eV) | 100.0 | . | Ions.sigmaEnergy | Standard deviation of ion energy (eV) | 10.0 | . | Ions.exponent | Exponent of power cosine source distribution of initial ion directions | 500.0 | . | Ions.inflectAngle | Inflection angle (rad) | 1.55334303 | . | Ions.n_l | Exponent of reflection power | 10.0 | . | Ions.minAngle | Minimum cone angle for ion reflection | 1.3962634 | . | Ions.thetaRMin | Minimum angle for ion sticking probability | 70.0 (deg) | . | Ions.thetaRMax | Maximum angle for ion sticking probability | 90.0 (deg) | . Example usage: . C++ . // namespace viennaps ... SF6O2Parameters<NumericType> parameters; parameters.ionFlux = 10.; parameters.Mask.rho = 500.; auto model = SmartPointer<SF6O2Etching<NumericType, D>>::New(parameters); ... Python ... parameters = vps.SF6O2Parameters() parameters.ionFlux = 10. parameters.Mask.rho = 500. model = vps.SF6O2Etching(parameters) ... ", + "url": "/models/prebuilt/SF6O2Etching.html#implementation", - "relUrl": "/models/prebuilt/SF6O2Etching.html#sf6-etching" + "relUrl": "/models/prebuilt/SF6O2Etching.html#implementation" },"4": { "doc": "SF6O2 Etching", "title": "Related Examples", @@ -85,7 +85,7 @@ },"12": { "doc": "Custom Geometry", "title": "Custom Geometry using ViennaLS", - "content": ". ViennaPS offers the capability to create custom geometries using tools from the ViennaLS library. The viennals::MakeGeometry function provides functionality for constructing basic geometric shapes like boxes, spheres, or cylinders. Moreover, shapes can be formed by creating a convex hull over a point cloud or by explicitly defining points and elements of a structure. Subsequently, boolean operations such as union, intersect, and relative complement can be applied to merge these basic shapes into a customized geometry. This flexible approach enables users to create complex geometries tailored to their specific simulation requirements. Some examples are provided below: . Examples: . Coming soon . ", + "content": ". ViennaPS offers the capability to create custom geometries using tools from the ViennaLS library. The viennals::MakeGeometry function provides functionality for constructing basic geometric shapes like boxes, spheres, or cylinders. Moreover, shapes can be formed by creating a convex hull over a point cloud or by explicitly defining points and elements of a structure. Subsequently, boolean operations such as union, intersect, and relative complement can be applied to merge these basic shapes into a customized geometry. This flexible approach enables users to create complex geometries tailored to their specific simulation requirements. ", "url": "/geo/custom.html#custom-geometry-using-viennals", "relUrl": "/geo/custom.html#custom-geometry-using-viennals" @@ -120,7 +120,7 @@ },"17": { "doc": "Fin Geometry", "title": "Fin Geometry", - "content": "#include <psMakeFin.hpp> . The MakeFin class generates a fin geometry extending in the z (3D) or y (2D) direction, centered at the origin with specified dimensions in the x and y directions. The fin may incorporate periodic boundaries in the x and y directions (limited to 3D). Users can define the width and height of the fin, and it can function as a mask, with the specified material exclusively applied to the bottom of the fin, while the upper portion adopts the mask material. // namespace viennaps MakeFin(DomainType domain, const NumericType gridDelta, const NumericType xExtent, const NumericType yExtent, const NumericType finWidth, const NumericType finHeight, const NumericType baseHeight = 0., const bool periodicBoundary = false, const bool makeMask = false, const Material material = Material::None) . | Parameter | Description | Type | . | domain | Specifies the type of domain for the fin geometry. | SmartPointer<Domain<NumericType, D> | . | gridDelta | Represents the grid spacing or resolution used in the simulation. | NumericType | . | xExtent | Defines the extent of the fin geometry in the x-direction. | NumericType | . | yExtent | Specifies the extent of the fin geometry in the y-direction. | NumericType | . | finWidth | Sets the width of the fin. | NumericType | . | finHeight | Determines the height of the fin. | NumericType | . | baseHeight | (Optional) Sets the base height of the fin. Default is set to 0. | NumericType | . | periodicBoundary | (Optional) If set to true, enables periodic boundaries in both x and y directions. Default is set to false. | bool | . | makeMask | (Optional) If set to true, allows the fin to function as a mask, with specified material applied only to the bottom. Default is set to false. | bool | . | material | (Optional) Specifies the material used for the fin. Default is set to Material::None. | Material | . Example usage: . C++ . // namespace viennaps auto domain = SmartPointer<Domain<NumericType, D>>::New(); MakeFin<NumericType, D>(domain, 0.5, 10.0, 10.0, 5.0, 5.0, 0., false, false, Material::Si) .apply(); . Python: . domain = vps.Domain() vps.MakeFin(domain=domain, gridDelta=0.5, xExtent=10.0, yExtent=10.0, finWidth=2.5, finHeight=5.0, baseHeight=0.0, periodicBoundary=False, makeMask=False, material=vps.Material.Si, ).apply() . ", + "content": "#include <geometries/psMakeFin.hpp> . The MakeFin class generates a fin geometry extending in the z (3D) or y (2D) direction, centered at the origin with specified dimensions in the x and y directions. The fin may incorporate periodic boundaries in the x and y directions (limited to 3D). Users can define the width and height of the fin, and it can function as a mask, with the specified material exclusively applied to the bottom of the fin, while the upper portion adopts the mask material. // namespace viennaps // with DomainSetup configured (v3.3.0) MakeFin(DomainType domain, NumericType finWidth, NumericType finHeight, NumericType finTaperAngle, NumericType maskHeight = 0., NumericType maskTaperAngle = 0., bool halfFin = false, Material material = Material::Si, Material maskMaterial = Material::Mask) MakeFin(DomainType domain, const NumericType gridDelta, const NumericType xExtent, const NumericType yExtent, const NumericType finWidth, const NumericType finHeight, const NumericType baseHeight = 0., const bool periodicBoundary = false, const bool makeMask = false, const Material material = Material::Si) . | Parameter | Type | Description | Applicable Constructor | . | domain | psDomainType | The simulation domain. | Both | . | finWidth | NumericType | Width of the fin. | Both | . | finHeight | NumericType | Height of the fin. | Both (ignored if makeMask = true) | . | finTaperAngle | NumericType | Taper angle of the fin (default: 0.). | Both (ignored if makeMask = true) | . | maskHeight | NumericType | Height of the mask (default: 0.). | First constructor only | . | maskTaperAngle | NumericType | Taper angle of the mask (default: 0.). | First constructor only | . | halfFin | bool | If true, the fin is halved along the x-axis. | First constructor only | . | material | Material | Material of the fin (default: Material::Si). | Both | . | maskMaterial | Material | Material of the mask (default: Material::Mask). | First constructor only | . | gridDelta | NumericType | Grid spacing in the simulation domain. | Second constructor only | . | xExtent | NumericType | Extent of the domain in the x-direction. | Second constructor only | . | yExtent | NumericType | Extent of the domain in the y-direction. | Second constructor only | . | taperAngle | NumericType | Taper angle of the fin/mask. | Second constructor only | . | baseHeight | NumericType | Base height of the fin (default: 0.). | Second constructor only | . | periodicBoundary | bool | If true, enables periodic boundary conditions (default: false). | Second constructor only | . | makeMask | bool | If true, a mask is created instead of a fin (default: false). | Second constructor only | . Note: . | The first constructor requires that the domain is already configured and is only available from ViennaPS v3.3.0. | The second constructor allows domain setup within the constructor by specifying gridDelta, xExtent, and yExtent. | . Example usage: . C++ . // namespace viennaps // recomended with DomainSetup configured (v3.3.0) auto domain = SmartPointer<Domain<NumericType, D>>::New(0.5, 10., 10., BoundaryType::REFLECTIVE_BOUNDARY); MakeFin(domain, 2.5, 5.0, 10., 0., 0., false, Material::Si, Material::Mask).apply(); // without DomainSetup auto domain = SmartPointer<Domain<NumericType, D>>::New(); MakeFin<NumericType, D>(domain, 0.5, 10.0, 10.0, 5.0, 5.0, 0., false, false, Material::Si) .apply(); . Python: . # with DomainSetup configured (v3.3.0) domain = vps.Domain(0.5, 10., 10., vps.BoundaryType.REFLECTIVE_BOUNDARY) vps.MakeFin(domain=domain, finWidth=2.5, finHeight=5.0, finTaperAngle=10., maskHeight=5., maskTaperAngle=0., halfFin=False, material=vps.Material.Si, maskMaterial=vps.Material.Mask ).apply() # without DomainSetup domain = vps.Domain() vps.MakeFin(domain=domain, gridDelta=0.5, xExtent=10.0, yExtent=10.0, finWidth=2.5, finHeight=5.0, baseHeight=0.0, periodicBoundary=False, makeMask=False, material=vps.Material.Si, ).apply() . ", "url": "/geo/basic/fin.html", "relUrl": "/geo/basic/fin.html" @@ -169,14 +169,14 @@ },"24": { "doc": "Member Functions", "title": "Constructors", - "content": "Domain() Domain(SmartPointer<Domain> passedDomain) Domain(SmartPointer<viennals::Domain<NumericType, D>> passedLevelSet, bool generateCellSet = false, const NumericType passedCellSetDepth = 0., const bool passedCellSetPosition = false) Domain(lsDomainsType passedLevelSets, bool generateCellSet = false, const NumericType passedCellSetDepth = 0., const bool passedCellSetPosition = false) . ", + "content": "// namespace viennaps Domain() Domain(SmartPointer<Domain> passedDomain) // deep copy contructor Domain(SmartPointer<viennals::Domain<NumericType, D>> passedLevelSet) Domain(std::vector<viennals::Domain<NumericType, D>> passedLevelSets) // Configure DomainSetup (v3.3.0) for basic geometry builders Domain(NumericType gridDelta, NumericType xExtent, BoundaryType boundary = BoundaryType::REFLECTIVE_BOUNDARY) // 2D only Domain(NumericType gridDelta, NumericType xExtent, NumericType yExtent = 0.0, BoundaryType boundary = BoundaryType::REFLECTIVE_BOUNDARY) Domain(const Setup &setup) . ", "url": "/domain/functions.html#constructors", "relUrl": "/domain/functions.html#constructors" },"25": { "doc": "Member Functions", "title": "Member Functions", - "content": "void deepCopy(SmartPointer<Domain> passedDomain) void insertNextLevelSet(SmartPointer<viennals::Domain<NumericType, D>> passedLevelSet, bool wrapLowerLevelSet = true) void insertNextLevelSetAsMaterial(SmartPointer<viennals::Domain<NumericType, D>> passedLevelSet, const Material material, bool wrapLowerLevelSet = true) void duplicateTopLevelSet(const Material material = Material::None) void removeTopLevelSet() void removeLevelSet(unsigned int idx, bool removeWrapped = true) void removeMaterial(const Material material) void applyBooleanOperation(SmartPointer<viennals::Domain<NumericType, D>> levelSet, viennals::BooleanOperationEnum operation) void generateCellSet(const NumericType position, const Material coverMaterial, const bool isAboveSurface = false) void setMaterial(unsigned int lsId, const Material material) auto &getLevelSets() const auto &getMaterialMap() const auto &getCellSet() const auto &getGrid() const auto getBoundingBox() const void print() const void saveLevelSetMesh(std::string name, int width = 1) void saveSurfaceMesh(std::string name, bool addMaterialIds = true) void saveVolumeMesh(std::string name) void saveLevelSets(std::string fileName) const void clear() . ", + "content": "void setup(const Setup &setup) void setup(NumericType gridDelta, NumericType xExtent, NumericType yExtent = 0, BoundaryType boundary = BoundaryType::REFLECTIVE_BOUNDARY) void deepCopy(SmartPointer<Domain> passedDomain) void insertNextLevelSet(SmartPointer<viennals::Domain<NumericType, D>> passedLevelSet, bool wrapLowerLevelSet = true) void insertNextLevelSetAsMaterial(SmartPointer<viennals::Domain<NumericType, D>> passedLevelSet, const Material material, bool wrapLowerLevelSet = true) void duplicateTopLevelSet(const Material material = Material::None) void removeTopLevelSet() void removeLevelSet(unsigned int idx, bool removeWrapped = true) void removeMaterial(const Material material) void applyBooleanOperation(SmartPointer<viennals::Domain<NumericType, D>> levelSet, viennals::BooleanOperationEnum operation) void generateCellSet(const NumericType position, const Material coverMaterial, const bool isAboveSurface = false) void setMaterial(unsigned int lsId, const Material material) auto &getLevelSets() const auto &getMaterialMap() const auto &getCellSet() const auto &getGrid() const auto getGridDelta() const auto &getSetup() auto getBoundingBox() const auto getBoundaryConditions() const void print() const void saveLevelSetMesh(std::string name, int width = 1) void saveSurfaceMesh(std::string name, bool addMaterialIds = true) void saveVolumeMesh(std::string name, double wrappingLayerEpsilon = 1e-2) void saveHullMesh(std::string name, double wrappingLayerEpsilon = 1e-2) void saveLevelSets(std::string fileName) const void clear() . ", "url": "/domain/functions.html", "relUrl": "/domain/functions.html" @@ -204,534 +204,541 @@ },"29": { "doc": "Hole Geometry", "title": "Hole Geometry", - "content": "#include <psMakeHole.hpp> . The MakeHole class generates a hole geometry in the z direction, which, in 2D mode, corresponds to a trench geometry. Positioned at the origin, the hole is centered, with the total extent defined in the x and y directions. The normal direction for the hole creation is in the positive z direction in 3D and the positive y direction in 2D. Users can specify the hole’s radius, depth, and opt for tapering with a designated angle. The hole configuration may include periodic boundaries in both the x and y directions. Additionally, the hole can serve as a mask, with the specified material only applied to the bottom of the hole, while the remainder adopts the mask material. // namespace viennaps MakeHole(DomainType domain, NumericType gridDelta, NumericType xExtent, NumericType yExtent, NumericType holeRadius, NumericType holeDepth, NumericType taperAngle = 0., // in degrees NumericType baseHeight = 0., bool periodicBoundary = false, bool makeMask = false, Material material = Material::None, HoleShape holeShape = HoleShape::Full) . | Parameter | Description | Type | . | domain | Specifies the type of domain for the hole geometry. | SmartPointer<Domain<NumericType, D>> | . | gridDelta | Represents the grid spacing or resolution used in the simulation. | NumericType | . | xExtent | Defines the extent of the hole geometry in the x-direction. | NumericType | . | yExtent | Specifies the extent of the hole geometry in the y-direction. | NumericType | . | holeRadius | Sets the radius of the hole. | NumericType | . | holeDepth | Determines the depth of the hole. | NumericType | . | taperAngle | (Optional) Specifies the angle of tapering for the hole geometry in degrees. Default is set to 0. | NumericType | . | baseHeight | (Optional) Sets the base height of the hole. Default is set to 0. | NumericType | . | periodicBoundary | (Optional) If set to true, enables periodic boundaries in both x and y directions. Default is set to false. | bool | . | makeMask | (Optional) If set to true, allows the hole to function as a mask, with specified material applied only to the bottom. Default is set to false. | bool | . | material | (Optional) Specifies the material used for the hole. Default is set to Material::None. | Material | . | holeShape | (Optional) Specifies whether a full, half or quarter hole should be created. Half and quarter holes with reflective boundary conditions can simulate the full dynamics of a hole with less computational cost. Default is set to HoleShape::Full. | HoleShape | . Example usage: . C++ . // namespace viennaps auto domain = SmartPointer<Domain<NumericType, D>>::New(); MakeHole<NumericType, D>(domain, 0.5, 10.0, 10.0, 2.5, 5.0, 10., 0., false, false, Material::Si) .apply(); . Python . domain = vps.Domain() vps.MakeHole(domain=domain, gridDelta=0.5, xExtent=10.0, yExtent=10.0, holeRadius=2.5, holeDepth=5.0, taperingAngle=10.0, baseHeight=0.0, periodicBoundary=False, makeMask=False, material=vps.Material.Si, holeShape=vps.HoleShape.Quarter ).apply() . ", + "content": "#include <geometries/psMakeHole.hpp> . The MakeHole class generates a hole geometry in the z direction, which, in 2D mode, corresponds to a trench geometry. Positioned at the origin, the hole is centered, with the total extent defined in the x and y directions. The normal direction for the hole creation is in the positive z direction in 3D and the positive y direction in 2D. Users can specify the hole’s radius, depth, and opt for tapering with a designated angle. The hole configuration may include periodic boundaries in both the x and y directions. Additionally, the hole can serve as a mask, with the specified material only applied to the bottom of the hole, while the remainder adopts the mask material. // namespace viennaps // with DomainSetup configured (v3.3.0) MakeHole(psDomainType domain, NumericType holeRadius, NumericType holeDepth, NumericType holeTaperAngle = 0., NumericType maskHeight = 0., NumericType maskTaperAngle = 0., HoleShape shape = HoleShape::Full, Material material = Material::Si, Material maskMaterial = Material::Mask) MakeHole(DomainType domain, NumericType gridDelta, NumericType xExtent, NumericType yExtent, NumericType holeRadius, NumericType holeDepth, NumericType taperAngle = 0., // in degrees NumericType baseHeight = 0., bool periodicBoundary = false, bool makeMask = false, Material material = Material::Si, HoleShape holeShape = HoleShape::Full) . | Parameter | Type | Description | Applicable Constructor | . | domain | psDomainType | The simulation domain. | Both | . | holeRadius | NumericType | Radius of the hole. | Both | . | holeDepth | NumericType | Depth of the hole. | Both | . | holeTaperAngle | NumericType | Taper angle of the hole (default: 0.). | Both | . | maskHeight | NumericType | Height of the masking layer (default: 0.). | First constructor only | . | maskTaperAngle | NumericType | Taper angle of the masking layer (default: 0.). | First constructor only | . | shape | HoleShape | Shape of the hole (default: HoleShape::Full). | Both | . | material | Material | Material of the hole (default: Material::Si). | Both | . | maskMaterial | Material | Material of the mask (default: Material::Mask). | First constructor only | . | gridDelta | NumericType | Grid spacing in the simulation domain. | Second constructor only | . | xExtent | NumericType | Extent of the domain in the x-direction. | Second constructor only | . | yExtent | NumericType | Extent of the domain in the y-direction. | Second constructor only | . | taperAngle | NumericType | Alternative name for holeTaperAngle in the second constructor (default: 0.). | Second constructor only | . | baseHeight | NumericType | Height at which the hole starts (default: 0.). | Second constructor only | . | periodicBoundary | bool | If true, enables periodic boundary conditions (default: false). | Second constructor only | . | makeMask | bool | If true, the mask is created instead of the hole, setting holeDepth to 0 (default: false). | Second constructor only | . Note: . | The first constructor requires that the domain is already configured. | The second constructor sets up a new simulation domain with gridDelta, xExtent, and yExtent. | If makeMask is true, the hole is not created, and only the masking layer is applied. | . Example usage: . C++ . // namespace viennaps // with DomainSetup configured (v3.3.0) auto domain = SmartPointer<Domain<NumericType, D>>::New(0.5, 10., 10., BoundaryType::REFLECTIVE_BOUNDARY); MakeHole<NumericType, D>(domain, 5.0, 5.0, 10., 0., 0., HoleShape::Quarter, Material::Si, Material::Mask) .apply(); // without DomainSetup auto domain = SmartPointer<Domain<NumericType, D>>::New(); MakeHole<NumericType, D>(domain, 0.5, 10.0, 10.0, 2.5, 5.0, 10., 0., false, false, Material::Si) .apply(); . Python . # with DomainSetup configured (v3.3.0) domain = vps.Domain(gridDelta=0.5, xExtent=10.0, yExtent=10.0, boundaryType=vps.BoundaryType.REFLECTIVE_BOUNDARY) vps.MakeHole(domain=domain, holeRadius=5.0, holeDepth=0.0, holeTaperAngle=0.0, maskHeight=5.0, maskTaperAngle=2.0, shape=vps.HoleShape.Quarter, material=vps.Material.Si, maskMaterial=vps.Material.Mask ).apply() domain = vps.Domain() vps.MakeHole(domain=domain, gridDelta=0.5, xExtent=10.0, yExtent=10.0, holeRadius=2.5, holeDepth=5.0, taperingAngle=10.0, baseHeight=0.0, periodicBoundary=False, makeMask=False, material=vps.Material.Si, holeShape=vps.HoleShape.Quarter ).apply() . ", "url": "/geo/basic/hole.html", "relUrl": "/geo/basic/hole.html" },"30": { - "doc": "Basic Geometries", - "title": "Basic Geometries", - "content": ". ViennaPS provides a set of functions to effortlessly create basic geometries, facilitating quick testing of models or serving as the groundwork for your process simulation configuration. The various available geometries are outlined below: . ", - "url": "/geo/basic/", - - "relUrl": "/geo/basic/" - },"31": { - "doc": "Miscellaneous", - "title": "Miscellaneous", - "content": " ", - "url": "/misc/", - - "relUrl": "/misc/" - },"32": { "doc": "General Notes", "title": "General Notes", "content": ". ", "url": "/general/", "relUrl": "/general/" - },"33": { + },"31": { "doc": "General Notes", "title": "Namespace", "content": "ViennaPS is encapsulated within the viennaps namespace. This design choice ensures that all classes, functions, and utilities within the library are organized under a single namespace, providing a clean and structured interface for users. When working with ViennaPS, it is essential to include the viennaps namespace in your code to access the library’s functionality. In this documentation, the namespace is omitted for brevity, but it should be included in your code. ", "url": "/general/#namespace", "relUrl": "/general/#namespace" - },"34": { + },"32": { "doc": "General Notes", "title": "Numeric Types", "content": "ViennaPS supports the utilization of either float or double as the underlying numeric type. While float might offer slightly higher performance in some cases, it is generally recommended to use double in your simulation due to its enhanced precision. It’s essential to note that the choice of numeric type is a static (compile-time) parameter in every ViennaPS class and function. Once a numeric type is selected for a particular simulation, it is not possible to switch to a different numeric type within the program. Additionally, for users working with Python bindings, it’s important to be aware that the Python interface always uses double as the numeric type. ", "url": "/general/#numeric-types", "relUrl": "/general/#numeric-types" - },"35": { + },"33": { "doc": "General Notes", "title": "Switching between 2D and 3D mode", "content": "ViennaPS provides the flexibility for users to choose between 2D and 3D modes during compile time. The dimensionality is specified as a second template (static) parameter, and most classes and functions in ViennaPS adhere to this structure. It’s important to note that 2D and 3D classes cannot be mixed within the same simulation, and the choice of dimensionality is fixed at compile time. For users who need to transition from a 2D to a 3D simulation, ViennaPS offers the Extrude utility. This utility enables the extrusion of a 2D domain to 3D, providing a seamless way to extend simulations across different dimensions. ", "url": "/general/#switching-between-2d-and-3d-mode", "relUrl": "/general/#switching-between-2d-and-3d-mode" - },"36": { + },"34": { "doc": "General Notes", "title": "Using Smart Pointers", "content": "In ViennaPS, smart pointers are utilized to pass domains, models, and other essential objects to processes and utility functions. To facilitate this, the library includes a custom class named SmartPointer, serving as a shared pointer implementation. This design choice ensures efficient memory management and enables seamless interaction between different components within the simulation framework. Example: . // Creating a new domain auto domain = psSmartPointer<psDomain<NumericType, D>>::New(); // Using a pre-built model auto model = psSmartPointer<psIsotropicProcess<NumericType, D>>::New(/*pass constructor arguments*/); . ", "url": "/general/#using-smart-pointers", "relUrl": "/general/#using-smart-pointers" - },"37": { - "doc": "Creating a Geometry", - "title": "Creating a Geometry", - "content": ". Create intricate geometries using the versatile tools offered by ViennaLS or generate a basic geometry using of the provided geometry builders. Alternatively, you can import a geometry from a GDSII mask file. ", - "url": "/geo/", - - "relUrl": "/geo/" - },"38": { - "doc": "Geometry Output", - "title": "Geometry Output", - "content": ". ViennaPS provides various methods for outputting the surface or volume of the processed domain. The data is typically saved in the VTK file format, with surfaces stored in .vtp files and volumes in .vtu files. For visualization, we recommend using ParaView, a powerful open-source visualization tool. Below, you’ll find further details on the available geometry outputs. In addition to VTK file formats, ViennaPS provides the flexibility to store level sets directly in the proprietary .lvst format. This feature enables users to save intermediate states during the process, allowing for more detailed analysis and the ability to revisit specific simulation stages. ", - "url": "/output/", - - "relUrl": "/output/" - },"39": { - "doc": "Pre-Built Models", - "title": "Pre-Built Models", - "content": " ", - "url": "/models/prebuilt/", - - "relUrl": "/models/prebuilt/" - },"40": { - "doc": "Custom Models", - "title": "Custom Models", - "content": ". Users can create a custom process model by interfacing one or more of the classes described below and then inserting them into their custom process model. | The SurfaceModel class is used to describe surface reactions, combining particle fluxes with the surface chemical reactions. | The VelocityField provides the interface between surface velocities and the advection kernel to integrate the Level-Set equation in a time step. | ViennaPS seamlessly integrates ViennaRay functionality through the viennaray::Particle class, providing users with a versatile interface to define the key characteristics of the simulated particle species. | . ", - "url": "/models/custom/", - - "relUrl": "/models/custom/" - },"41": { - "doc": "Process Models", - "title": "Process Models", - "content": "#include <psProcessModel.hpp> . All the information about the process is encompassed in the class ProcessModel, as it includes all the particle type information required for ray tracing, the surface model, as well as advection callbacks, for generating volume models describing chemical processes inside the material. Users have the flexibility to configure their own custom process model or opt for pre-defined models encompassing frequently used processes. ", - "url": "/models/", - - "relUrl": "/models/" - },"42": { - "doc": "Examples", - "title": "Examples", - "content": ". ", - "url": "/examples/", - - "relUrl": "/examples/" - },"43": { - "doc": "Examples", - "title": "Building", - "content": "The examples can be built using CMake: . git clone https://github.com/ViennaTools/ViennaPS.git cd ViennaPS cmake -B build -DVIENNAPS_BUILD_EXAMPLES=ON cmake --build build . The examples can then be executed in their respective build folders with the config files, e.g.: . cd examples/exampleName ./ExampleName.bat config.txt # (Windows) ./ExampleName config.txt # (Other) . Individual examples can also be build by calling make in their respective build folder. An equivalent Python script, using the ViennaPS Python bindings, is also given for each example. ", - "url": "/examples/#building", - - "relUrl": "/examples/#building" - },"44": { - "doc": "Examples", - "title": "Examples List", - "content": ". | Atomic Layer Deposition | Bosch Process | Custom Example Process | GDS Reader | Cantilever Wet Etching | Selective Epitaxy | Trench Deposition | Trench Deposition Geometric | TEOS Trench Deposition | Hole Etching | Stack Etching | Oxide Regrowth | Interpolation Demo | . ", - "url": "/examples/#examples-list", - - "relUrl": "/examples/#examples-list" - },"45": { + },"35": { "doc": "Dependencies", "title": "Dependencies", "content": ". ", "url": "/deps/", "relUrl": "/deps/" - },"46": { + },"36": { "doc": "Dependencies", "title": "ViennaLS", "content": "ViennaLS forms the foundation of the process simulator, applying the level-set surface representation concepts for topography simulations. This module not only stores the level-set surface but also encompasses essential algorithms for geometry initialization, level-set value manipulation based on a velocity field, surface feature analysis, and seamless conversion of the level-set representation to other commonly employed material representations in device simulators. ", "url": "/deps/#viennals", "relUrl": "/deps/#viennals" - },"47": { + },"37": { "doc": "Dependencies", "title": "ViennaRay", "content": "ViennaPS relies on ViennaRay, a top-down Monte Carlo flux calculation library, to carry out essential flux calculations. This library is built upon Intel®’s ray tracing kernel, Embree. Crafted with a focus on efficiency and high-performance ray tracing, ViennaRay ensures a seamless user experience through its straightforward and user-friendly interface. In the top-down Monte Carlo approach, a large number of pseudo-particles are launched from a source plane situated above the surface, and their points of impact on the surface are determined. These pseudo-particles are initialized with a uniform initial position on the source plane and an initial direction that follows a power-cosine distribution. Each pseudo-particle carries a specific payload, representing a fraction of the total source flux. Upon reaching the surface, the current payload of the pseudo-particle contributes to the flux at that particular surface location. Furthermore, pseudo-particles have the capability to undergo reflection from the surface. The payload of a pseudo-particle undergoes reduction by the sticking coefficient during reflection. As a result, a pseudo-particle is tracked until its payload falls below a certain threshold or until it exits the simulation domain. This tracking mechanism provides a comprehensive understanding of the particle dynamics during its interaction with the sample surface. ", "url": "/deps/#viennaray", "relUrl": "/deps/#viennaray" - },"48": { + },"38": { + "doc": "Miscellaneous", + "title": "Miscellaneous", + "content": " ", + "url": "/misc/", + + "relUrl": "/misc/" + },"39": { + "doc": "Geometry Output", + "title": "Geometry Output", + "content": ". ViennaPS provides various methods for outputting the surface or volume of the processed domain. The data is typically saved in the VTK file format, with surfaces stored in .vtp files and volumes in .vtu files. For visualization, we recommend using ParaView, a powerful open-source visualization tool. Below, you’ll find further details on the available geometry outputs. In addition to VTK file formats, ViennaPS provides the flexibility to store level sets directly in the proprietary .lvst format. This feature enables users to save intermediate states during the process, allowing for more detailed analysis and the ability to revisit specific simulation stages. ", + "url": "/output/", + + "relUrl": "/output/" + },"40": { "doc": "Installing the Library", "title": "Installing the Library", "content": ". ", "url": "/inst/", "relUrl": "/inst/" - },"49": { + },"41": { "doc": "Installing the Library", "title": "Supported Operating Systems", "content": ". | Windows (Visual Studio) . | Linux (g++ / clang) . | macOS (XCode) . | . ", "url": "/inst/#supported-operating-systems", "relUrl": "/inst/#supported-operating-systems" - },"50": { + },"42": { "doc": "Installing the Library", "title": "System Requirements", "content": ". | C++17 Compiler with OpenMP support | . ", "url": "/inst/#system-requirements", "relUrl": "/inst/#system-requirements" - },"51": { + },"43": { "doc": "Installing the Library", "title": "Installing", "content": "ViennaLS uses VTK as dependency which can be installed beforehand to save some time when building the dependencies. On Linux based systems, it can be installed using the package manager: sudo apt install libvtk9.1 libvtk9-dev. On macOS, one can use Homebrew to install it: brew install vtk. ViennaRay uses Embree as dependency which can be installed beforehand to save some time when building the dependencies. On Linux based systems, it can be installed using the package manager: sudo apt install libembree-dev. If you are using an Ubuntu version older than 24, the installed package will be Embree version 3, and you must additionally pass VIENNARAY_EMBREE_VERSION=3 to the CMake options, e.g., cmake -B build -G Ninja -D VIENNARAY_EMBREE_VERSION=3 On macOS, you can install Embree using Homebrew with the command: brew install embree. The CMake configuration automatically checks if the dependencies are installed. If CMake is unable to find them, the dependencies will be built from source with the buildDependencies target. Notably, ViennaPS operates as a header-only library, eliminating the need for a formal installation process. Nonetheless, we advise following the outlined procedure to neatly organize and relocate all header files to a designated directory: . git clone https://github.com/ViennaTools/ViennaPS.git cd ViennaPS cmake -B build -G Ninja && cmake --build build cmake --install build --prefix \"/path/to/your/custom/install/\" . This will install the necessary headers and CMake files to the specified path. If --prefix is not specified, it will be installed to the standard path for your system, usually /usr/local/ . The -G Ninja option can be omitted if you prefer to use Unix Makefiles as the build system. However, this can potentially lead to conflicts when later installing the Python package using the pip installer, as pip always employs Ninja as the build system. ", "url": "/inst/#installing", "relUrl": "/inst/#installing" - },"52": { + },"44": { "doc": "Installing the Library", "title": "Python package", "content": "Pre-built python packages are now available in the TestPyPi index for most common operating systems. To download the package, run the following command: . pip install ViennaPS . If there is no pre-built package available for your operating system, you can build the package yourself using the instructions below. ", "url": "/inst/#python-package", "relUrl": "/inst/#python-package" - },"53": { + },"45": { "doc": "Installing the Library", "title": "Building the Python package", "content": "In order to build the Python bindings, the pybind11 library is required. On Linux based system (Ubuntu/Debian), pybind11 can be installed via the package manager: sudo apt install pybind11-dev. For macOS, the installation via Homebrew is recommended: brew install pybind11. The ViennaPS Python package can be built and installed using the pip command: . git clone https://github.com/ViennaTools/ViennaPS.git cd ViennaPS pip install . Some functionalities of the ViennaPS Python module only work in combination with the ViennaLS Python module. It is therefore necessary to additionally install the ViennaLS Python module on your system. Instructions to do so can be found in the ViennaLS Git Repository. ", "url": "/inst/#building-the-python-package", "relUrl": "/inst/#building-the-python-package" - },"54": { + },"46": { "doc": "Installing the Library", "title": "Using the Python package", "content": "The 2D version of the library can be imported as follows: . import viennaps2d as vps . In order to switch to 3D mode, only the import needs to be changed: . import viennaps3d as vps . ", "url": "/inst/#using-the-python-package", "relUrl": "/inst/#using-the-python-package" - },"55": { + },"47": { "doc": "Installing the Library", "title": "Integration in CMake projects", "content": "We recommend using CPM.cmake to consume this library. | Installation with CPM CPMAddPackage(\"gh:viennatools/viennaps@3.1.0\") . | With a local installation In case you have ViennaPS installed in a custom directory, make sure to properly specify the CMAKE_PREFIX_PATH. list(APPEND CMAKE_PREFIX_PATH \"/your/local/installation\") find_package(ViennaPS) target_link_libraries(${PROJECT_NAME} PUBLIC ViennaTools::ViennaPS) . | . ", "url": "/inst/#integration-in-cmake-projects", "relUrl": "/inst/#integration-in-cmake-projects" - },"56": { + },"48": { "doc": "Installing the Library", "title": "Troubleshooting", "content": "Failed Python package build . The following error can occur while building the Python package using pip: . Building wheels for collected packages: ViennaPS_Python Building wheel for ViennaPS_Python (pyproject.toml) ... error error: subprocess-exited-with-error × Building wheel for ViennaPS_Python (pyproject.toml) did not run successfully. │ exit code: 1 ╰─> [21 lines of output] *** scikit-build-core 0.9.3 using CMake 3.27.4 (wheel) *** Configuring CMake... loading initial cache file build/CMakeInit.txt -- CPM: Adding package PackageProject@1.11.1 (v1.11.1) ninja: error: Makefile:5: expected '=', got ':' default_target: all ^ near here CMake Error at /usr/share/cmake-3.27/Modules/FetchContent.cmake:1662 (message): Build step for packageproject failed: 1 Call Stack (most recent call first): /usr/share/cmake-3.27/Modules/FetchContent.cmake:1802:EVAL:2 (__FetchContent_directPopulate) /usr/share/cmake-3.27/Modules/FetchContent.cmake:1802 (cmake_language) build/cmake/CPM_0.38.6.cmake:1004 (FetchContent_Populate) build/cmake/CPM_0.38.6.cmake:798 (cpm_fetch_package) CMakeLists.txt:98 (CPMAddPackage) -- Configuring incomplete, errors occurred! *** CMake configuration failed [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for ViennaPS_Python Failed to build ViennaPS_Python ERROR: Could not build wheels for ViennaPS_Python, which is required to install pyproject.toml-based projects . This error is due to a conflict with the Ninja build system and Unix Makefiles. To resolve this error, you can remove the build folder and then rerun pip. However, please note that this action will also remove all dependencies if they were installed alongside ViennaPS. ", "url": "/inst/#troubleshooting", "relUrl": "/inst/#troubleshooting" - },"57": { - "doc": "Simulation Domain", - "title": "Simulation Domain", - "content": "#include <psDomain.hpp> . In our simulation framework, the essential hub for all geometry details is the Domain class. This class is like a smart keeper of information, holding everything about the materials in the simulation domain. It uses level sets to show surfaces and material interfaces with great detail and organizes data in a cell-based structure for the underlying volumes. Depending on the specific process, it can use one or both of these methods. This flexibility ensures that the simulation can handle different processes accurately and efficiently. ", - "url": "/domain/", + },"49": { + "doc": "Pre-Built Models", + "title": "Pre-Built Models", + "content": " ", + "url": "/models/prebuilt/", - "relUrl": "/domain/" - },"58": { + "relUrl": "/models/prebuilt/" + },"50": { + "doc": "Custom Models", + "title": "Custom Models", + "content": ". Users can create a custom process model by interfacing one or more of the classes described below and then inserting them into their custom process model. | The SurfaceModel class is used to describe surface reactions, combining particle fluxes with the surface chemical reactions. | The VelocityField provides the interface between surface velocities and the advection kernel to integrate the Level-Set equation in a time step. | ViennaPS seamlessly integrates ViennaRay functionality through the viennaray::Particle class, providing users with a versatile interface to define the key characteristics of the simulated particle species. | . ", + "url": "/models/custom/", + + "relUrl": "/models/custom/" + },"51": { + "doc": "Process Models", + "title": "Process Models", + "content": "#include <psProcessModel.hpp> . All the information about the process is encompassed in the class ProcessModel, as it includes all the particle type information required for ray tracing, the surface model, as well as advection callbacks, for generating volume models describing chemical processes inside the material. Users have the flexibility to configure their own custom process model or opt for pre-defined models encompassing frequently used processes. ", + "url": "/models/", + + "relUrl": "/models/" + },"52": { "doc": "Running a Process", "title": "Running a Process", - "content": "#include <psProcess.hpp> . The Process class functions as the primary simulation interface, consolidating crucial elements such as the simulation domain, process model, process duration, and requisite ray-tracing parameters. This interface also contains the necessary methods for configuring these attributes. Upon setting these parameters, the apply() method is employed to execute the process,. Example usage: . C++ . // namespace viennaps ... Process<NumericType, D> process; process.setDomain(myDomain); process.setProcessModel(myModel); process.setProcessDuration(10.); process.setNumberOfRaysPerPoint(1000); process.enableFluxSmoothing(); process.apply(); ... Python ... process = vps.Process() process.setDomain(myDomain) process.setProcessModel(myModel) process.setProcessDuration(10.) process.setNumberOfRaysPerPoint(1000) process.enableFluxSmoothing() process.apply() ... ", + "content": "#include <psProcess.hpp> . The Process class functions as the primary simulation interface, consolidating crucial elements such as the simulation domain, process model, process duration, and requisite ray-tracing parameters. This interface also contains the necessary methods for configuring these attributes. Upon setting these parameters, the apply() method is employed to execute the process,. Example usage: . C++ . // namespace viennaps ... Process<NumericType, D> process; process.setDomain(myDomain); process.setProcessModel(myModel); process.setProcessDuration(10.); process.apply(); ... Python ... process = vps.Process() process.setDomain(myDomain) process.setProcessModel(myModel) process.setProcessDuration(10.) process.apply() ... ", "url": "/process/", "relUrl": "/process/" - },"59": { + },"53": { "doc": "Running a Process", "title": "Process Parameters", "content": "Advanced process parameters, as described in this section are available from version 3.3.0 . Expert users can set specific parameter for the Level-Set integration and Ray Tracing flux calculation steps using the advanced parameters structs AdvectionParameters and RayTracingParameters. These parameter structs contain: . AdvectionParameters: . | Parameter | Type | Default Value | Description | . | integrationScheme | IntegrationSchemeEnum | ENGQUIST_OSHER_1ST_ORDER | Integration scheme used for advection. For options see here. | . | timeStepRatio | NumericType | 0.4999 | Ratio controlling the time step specified by the CFL condition. More details | . | dissipationAlpha | NumericType | 1.0 | Factor controlling dissipation in Lax-Friedrichs type integration schemes. | . | velocityOutput | bool | false | Whether to output velocity data for each advection step. | . | ignoreVoids | bool | false | Whether to ignore void regions. | . RayTracingParameters: . | Parameter | Type | Default Value | Description | . | sourceDirection | TraceDirection | POS_Z (if D == 3), POS_Y (otherwise) | Direction of the ray source. | . | normalizationType | NormalizationType | SOURCE | Type of normalization used. Other option MAX. | . | raysPerPoint | unsigned | 1000 | Number of rays to trace per point in the geometry. | . | diskRadius | NumericType | 0 | Radius of the disks in the ray tracing geometry. If this value is 0 the default disk radius is used, which is the minimum radius such that there are no holes in the geometry. | . | useRandomSeeds | bool | true | Whether to use random seeds. | . | ignoreFluxBoundaries | bool | false | Whether to ignore boundary condtions during ray tracing. | . | smoothingNeighbors | int | 1 | Number of neighboring points used for smoothing the flux after ray tracing. | . Example usage: . C++ . // namespace viennaps ... AdvectionParameters<NumericType> advParams; advParams.integrationScheme = viennals::IntegrationSchemeEnum::LOCAL_LAX_FRIEDRICHS_2ND_ORDER advParams.timeStepRatio = 0.25 advParams.dissipationAlpha = 2.0 RayTracingParameters<NumericType, D> tracingParams; tracingParams.raysPerPoint = 500 tracingParams.smoothingNeighbors = 0 // disable flux smoothing Process<NumericType, D> process(myDomain, myModel, duration); process.setAdvectionParameters(advParams) process.setRayTracingParameters(tracingParams) process.apply(); ... Python ... advParams = vps.AdvectionParameters() advParams.integrationScheme = vps.ls.IntegrationSchemeEnum.LOCAL_LAX_FRIEDRICHS_2ND_ORDER advParams.timeStepRatio = 0.25 advParams.dissipationAlpha = 2.0 tracingParams = vps.RayTracingParameters() tracingParams.raysPerPoint = 500 tracingParams.smoothingNeighbors = 0 # disable flux smoothing process = vps.Process(myDomain, myModel, duration) process.setAdvectionParameters(advParams) process.setRayTracingParameters(tracingParams) process.apply() ... ", "url": "/process/#process-parameters", "relUrl": "/process/#process-parameters" - },"60": { + },"54": { "doc": "Running a Process", "title": "Member Functions", - "content": "Constructors . // Default constructor Process() // Constructor from domain Process(SmartPointer<Domain<NumericType, D>> passedDomain) // Constructor from domain, process model, and duration, // to apply simple processes template <typename ProcessModelType> Process(SmartPointer<Domain<NumericType, D>> passedDomain, SmartPointer<ProcessModelType> passedProcessModel, const NumericType passedDuration = 0.) . In summary, these constructors provide different ways to create a Process object, allowing for flexibility depending on what data is available at the time of object creation. | The first constructor is a default constructor. It’s defined as Process() and it doesn’t take any arguments. This constructor allows for the creation of a Process object without any initial values. | The second constructor takes a single argument: a smart pointer to a Domain object. This constructor initializes the domain member variable of the Process class with the passed Domain object. | The third constructor is a template constructor that takes three arguments: a smart pointer to a Domain object, a smart pointer to a ProcessModelType object, and a NumericType representing the process duration. This constructor initializes the domain and processDuration member variables with the passed values and also sets the model member variable to the dynamically cast ProcessModelType object. This allows the user to run a process from an anonymous object. For example: Process<NumericType, D>(myDomain, myModel, processDuration).apply() . | . Set the domain . void setDomain(SmartPointer<Domain<NumericType, D>> passedDomain) . Sets the process domain. Set the process model . void setProcessModel(SmartPointer<ProcessModel<NumericType, D>> passedProcessModel) . Sets the process model. This can be either a pre-configured process model or a custom process model. Set the source direction . void setSourceDirection(const viennaray::TraceDirection passedDirection) . Set the source direction, where the rays should be traced from. The passed direction parameter is using the enum viennaray::TraceDirection which contains the following values: POS_X, NEG_X, POS_Y, NEG_Y, POS_Z, NEG_Z. Set the process duration . void setProcessDuration(NumericType passedDuration) . Specifies the duration of the process. If the process duration is set to 0, exclusively the advection callback applyPreAdvect() is executed on the domain. This feature is particularly useful for applying only a volume model without engaging in further simulation steps. Set the number of rays to be traced . void setNumberOfRaysPerPoint(unsigned raysPerPoint) . Specify the number of rays to be traced for each particle throughout the process. The total count of rays is the product of this number and the number of points in the process geometry. Set the number of coverage initialization iterations . void setMaxCoverageInitIterations(unsigned numIter) . Set the number of iterations to initialize the coverages. Enable or disable flux smoothing . void enableFluxSmoothing() void disableFluxSmoothing() . Toggle the option to enable or disable flux smoothing. When flux smoothing is activated, the flux at each surface point, computed by the ray tracer, undergoes averaging across the neighboring surface points. Per default, flux smoothing is enabled. Enable or disable flux boundary conditions . void enableFluxBoundaries() void disableFluxBoundaries() . Toggle the option to enable or disable flux boundary conditions. When flux boundary conditions are disabled, particles are allowed to leave the domain without being reflected back into the domain. Per default, flux boundary conditions are enabled. Enable or disable random seeds . void enableRandomSeeds() void disableRandomSeeds() . Toggle the option to enable or disable random seeds. When random seeds are enabled, the random number generator is seeded with a random value, making the results generally not perfectly reproducible. Per default, random seeds are enabled. Set the integration scheme . void setIntegrationScheme(lsIntegrationSchemeEnum passedIntegrationScheme) . Set the integration scheme for solving the level-set equation. Possible integration schemes are specified in viennals::IntegrationSchemeEnum. Set the time step ratio . void setTimeStepRatio(NumericType cfl) . Set the CFL (Courant-Friedrichs-Levy) condition to use during surface advection in the level-set. The CFL condition defines the maximum distance a surface is allowed to move in a single advection step. It MUST be below 0.5 to guarantee numerical stability. Defaults to 0.4999. ", + "content": "Constructors . // Default constructor Process() // Constructor from domain Process(SmartPointer<Domain<NumericType, D>> passedDomain) // Constructor from domain, process model, and duration, // to apply simple processes template <typename ProcessModelType> Process(SmartPointer<Domain<NumericType, D>> passedDomain, SmartPointer<ProcessModelType> passedProcessModel, const NumericType passedDuration = 0.) . In summary, these constructors provide different ways to create a Process object, allowing for flexibility depending on what data is available at the time of object creation. | The first constructor is a default constructor. It’s defined as Process() and it doesn’t take any arguments. This constructor allows for the creation of a Process object without any initial values. | The second constructor takes a single argument: a smart pointer to a Domain object. This constructor initializes the domain member variable of the Process class with the passed Domain object. | The third constructor is a template constructor that takes three arguments: a smart pointer to a Domain object, a smart pointer to a ProcessModelType object, and a NumericType representing the process duration. This constructor initializes the domain and processDuration member variables with the passed values and also sets the model member variable to the dynamically cast ProcessModelType object. This allows the user to run a process from an anonymous object. For example: Process<NumericType, D>(myDomain, myModel, processDuration).apply() . | . Set the domain . void setDomain(SmartPointer<Domain<NumericType, D>> passedDomain) . Sets the process domain. Set the process model . void setProcessModel(SmartPointer<ProcessModel<NumericType, D>> passedProcessModel) . Sets the process model. This can be either a pre-configured process model or a custom process model. Set the source direction . void setSourceDirection(const viennaray::TraceDirection passedDirection) . Set the source direction, where the rays should be traced from. The passed direction parameter is using the enum viennaray::TraceDirection which contains the following values: POS_X, NEG_X, POS_Y, NEG_Y, POS_Z, NEG_Z. Set the process duration . void setProcessDuration(NumericType passedDuration) . Specifies the duration of the process. If the process duration is set to 0, exclusively the advection callback applyPreAdvect() is executed on the domain. This feature is particularly useful for applying only a volume model without engaging in further simulation steps. Single-Pass Flux Calculation . SmartPointer<viennals::Mesh<NumericType>> calculateFlux() . Calculate the flux(es) for the current process. This function returns a smart pointer to a viennals::Mesh<NumericType> object containing the disk mesh and flux data. Set the number of coverage initialization iterations . void setMaxCoverageInitIterations(unsigned numIter) . Set the maximum number of iterations to initialize the coverages. If additionally the coverage delta threshold is set, the coverage initialization is considered converged if the coverage delta is below the threshold or the maximum number of iterations is reached. Set coverage delta threshold . void setCoverageDeltaThreshold(NumericType threshold) . Set the threshold for the coverage delta metric to reach convergence. If the coverage delta is below this threshold, the coverage initialization is considered converged. During a process, if the coverage delta is higher than this threshold, the flux calculation is repeated. Set the advection parameters . void setAdvectionParameters(const AdvectionParameters<NumericType>& passedAdvectionParameters) . Set the advection parameters for the level-set integration. The advection parameters are defined in the AdvectionParameters struct. Set the ray tracing parameters . void setRayTracingParameters(const RayTracingParameters<NumericType, D>& passedRayTracingParameters) . Set the ray tracing parameters for the flux calculation. The ray tracing parameters are defined in the RayTracingParameters struct. The following functions are used to set parameters in the AdvectionParameters and RayTracingParameters structs. From version 3.3.0, it is recommended to use the setAdvectionParameters and setRayTracingParameters functions to set these parameters. Set the number of rays to be traced . void setNumberOfRaysPerPoint(unsigned raysPerPoint) . Specify the number of rays to be traced for each particle throughout the process. The total count of rays is the product of this number and the number of points in the process geometry. Enable or disable flux smoothing . void enableFluxSmoothing() void disableFluxSmoothing() . Toggle the option to enable or disable flux smoothing. When flux smoothing is activated, the flux at each surface point, computed by the ray tracer, undergoes averaging across the neighboring surface points. Per default, flux smoothing is enabled. Enable or disable flux boundary conditions . void enableFluxBoundaries() void disableFluxBoundaries() . Toggle the option to enable or disable flux boundary conditions. When flux boundary conditions are disabled, particles are allowed to leave the domain without being reflected back into the domain. Per default, flux boundary conditions are enabled. Enable or disable random seeds . void enableRandomSeeds() void disableRandomSeeds() . Toggle the option to enable or disable random seeds. When random seeds are enabled, the random number generator is seeded with a random value, making the results generally not perfectly reproducible. Per default, random seeds are enabled. Set the integration scheme . void setIntegrationScheme(lsIntegrationSchemeEnum passedIntegrationScheme) . Set the integration scheme for solving the level-set equation. Possible integration schemes are specified in viennals::IntegrationSchemeEnum. Set the time step ratio . void setTimeStepRatio(NumericType cfl) . Set the CFL (Courant-Friedrichs-Levy) condition to use during surface advection in the level-set. The CFL condition defines the maximum distance a surface is allowed to move in a single advection step. It MUST be below 0.5 to guarantee numerical stability. Defaults to 0.4999. ", "url": "/process/#member-functions", "relUrl": "/process/#member-functions" + },"55": { + "doc": "Simulation Domain", + "title": "Simulation Domain", + "content": "#include <psDomain.hpp> . In our simulation framework, the essential hub for all geometry details is the Domain class. This class is like a smart keeper of information, holding everything about the materials in the simulation domain. It uses level sets to show surfaces and material interfaces with great detail and organizes data in a cell-based structure for the underlying volumes. Depending on the specific process, it can use one or both of these methods. This flexibility ensures that the simulation can handle different processes accurately and efficiently. ", + "url": "/domain/", + + "relUrl": "/domain/" + },"56": { + "doc": "Geometry Builders", + "title": "Basic Geometry Builders", + "content": ". ViennaPS provides a set of functions to effortlessly create basic geometries, facilitating quick testing of models or serving as the groundwork for your process simulation configuration. The various available geometries are outlined below: . ", + "url": "/geo/basic/#basic-geometry-builders", + + "relUrl": "/geo/basic/#basic-geometry-builders" + },"57": { + "doc": "Geometry Builders", + "title": "Geometry Builders", + "content": " ", + "url": "/geo/basic/", + + "relUrl": "/geo/basic/" + },"58": { + "doc": "Creating a Geometry", + "title": "Creating a Geometry", + "content": ". Create custom geometries using the versatile tools offered by ViennaLS or generate a basic geometry (plane, hole, trench, fin, stack) using one of the provided geometry builders. Alternatively, you can import a geometry from a GDSII mask file. ", + "url": "/geo/", + + "relUrl": "/geo/" + },"59": { + "doc": "Examples", + "title": "Examples", + "content": ". ", + "url": "/examples/", + + "relUrl": "/examples/" + },"60": { + "doc": "Examples", + "title": "Building", + "content": "The examples can be built using CMake: . git clone https://github.com/ViennaTools/ViennaPS.git cd ViennaPS cmake -B build -DVIENNAPS_BUILD_EXAMPLES=ON cmake --build build . The examples can then be executed in their respective build folders with the config files, e.g.: . cd examples/exampleName ./ExampleName.bat config.txt # (Windows) ./ExampleName config.txt # (Other) . Individual examples can also be build by calling make in their respective build folder. An equivalent Python script, using the ViennaPS Python bindings, is also given for each example. ", + "url": "/examples/#building", + + "relUrl": "/examples/#building" },"61": { + "doc": "Examples", + "title": "Examples List", + "content": ". | Atomic Layer Deposition | Bosch Process | Custom Example Process | GDS Reader | Cantilever Wet Etching | Selective Epitaxy | Trench Deposition | Trench Deposition Geometric | TEOS Trench Deposition | Hole Etching | Stack Etching | Oxide Regrowth | Interpolation Demo | . ", + "url": "/examples/#examples-list", + + "relUrl": "/examples/#examples-list" + },"62": { "doc": "Home", "title": "ViennaPS", "content": "Process Simulation Library . Get started now View it on GitHub . ViennaPS is a header-only C++ process simulation library, which includes surface and volume representations, a ray tracer, and physical models for the simulation of microelectronic fabrication processes. This library seamlessly integrates advanced level-set functionalities with top-down Monte Carlo flux calculations, powered by state-of-the-art ray tracing techniques. This combination brings a new level of accuracy and efficiency to process simulations, empowering engineers and researchers to model complex systems. ViennaPS is under heavy development and improved daily. If you do have suggestions or find bugs, please let us know on GitHub or contact us directly at viennatools@iue.tuwien.ac.at! . This documentation serves as your comprehensive guide to understanding, implementing, and harnessing the capabilities of our process simulation library. Whether you are a seasoned researcher seeking to refine your simulations or an engineer aiming to optimize real-world processes, this library provides a versatile and robust platform to meet your diverse needs. Throughout this documentation, you will find detailed explanations, practical examples, and best practices to effectively utilize the library. We aim to empower users with the knowledge and tools necessary to simulate a wide range of processes accurately and efficiently, making informed decisions and driving innovation in the field. ", "url": "/#viennaps", "relUrl": "/#viennaps" - },"62": { + },"63": { "doc": "Home", "title": "Contributing", "content": "If you want to contribute to ViennaPS, make sure to follow the LLVM Coding guidelines. Make sure to format all files before creating a pull request: . cmake -B build cmake --build build --target format . ", "url": "/#contributing", "relUrl": "/#contributing" - },"63": { + },"64": { "doc": "Home", "title": "About the project", "content": "ViennaPS was developed under the aegis of the Institute for Microelectronics at the TU Wien. Current contributors: Tobias Reiter, Noah Karnel, Julius Piso, Lado Filipovic . Contact us via: viennatools@iue.tuwien.ac.at . ", "url": "/#about-the-project", "relUrl": "/#about-the-project" - },"64": { + },"65": { "doc": "Home", "title": "License", "content": "See file LICENSE in the base directory. ", "url": "/#license", "relUrl": "/#license" - },"65": { + },"66": { "doc": "Home", "title": "Home", "content": " ", "url": "/", "relUrl": "/" - },"66": { + },"67": { "doc": "Isotropic Process", "title": "Isotropic Process", "content": "#include <psIsotropicProcess.hpp> . An isotropic etching or deposition process initiates across all materials in the domain, excluding the masking material, which is by default set to Material::None. The default setting means, that the process unfolds uniformly across all materials within the domain. When the rate is less than 0, the material undergoes etching. Conversely, when the rate exceeds 0, material deposition occurs in accordance with the material of the top level set. If you want to deposit a new material, make sure to call the function duplicateTopLevelSet in your domain instance. psIsotropicProcess(const NumericType rate, const Material maskMaterial = Material::None) . | Parameter | Description | Type | . | rate | Rate of the process. | NumericType | . | maskMaterial | Material that does not participate in the process. | Material | . Deposition example: . C++ . #include <psIsotropicProcess.hpp> #include <psMakeTrench.hpp> #include <psProcess.hpp> using namespace viennaps; int main() { using NumericType = double; constexpr int D = 2; auto domain = SmartPointer<Domain<NumericType, D>>::New(); MakeTrench<NumericType, D>(domain, 0.1 /*gridDelta*/, 20. /*xExtent*/, 20. /*yExtent*/, 10. /*trenchWidth*/, 10. /*trenchDepth*/, 0., 0., false, false, Material::Si) .apply(); // duplicate top layer to capture deposition domain->duplicateTopLevelSet(Material::SiO2); auto model = SmartPointer<IsotropicProcess<NumericType, D>>::New( 0.1 /*rate*/, Material::None); domain->saveVolumeMesh(\"trench_initial\"); Process<NumericType, D>(domain, model, 20.).apply(); // run process for 20s domain->saveVolumeMesh(\"trench_final\"); } . Python . import viennaps2d as vps domain = vps.Domain() vps.MakeTrench(domain=domain, gridDelta=0.1, xExtent=20.0, yExtent=20.0, trenchWidth=10.0, trenchDepth=10.0, taperingAngle=0.0, baseHeight=0.0, periodicBoundary=False, makeMask=False, material=vps.Material.Si ).apply() # duplicate top layer to capture deposition domain.duplicateTopLevelSet(vps.Material.SiO2) model = vps.IsotropicProcess(rate=0.1) domain.saveVolumeMesh(\"trench_initial\") vps.Process(domain, model, 20.0).apply() domain.saveVolumeMesh(\"trench_final\") . Results: . Etching example: . C++ . #include <psIsotropicProcess.hpp> #include <psMakeTrench.hpp> #include <psProcess.hpp> using namespace viennaps; int main() { using NumericType = double; constexpr int D = 2; auto domain = SmartPointer<Domain<NumericType, D>>::New(); MakeTrench<NumericType, D>(domain, 0.1 /*gridDelta*/, 20. /*xExtent*/, 20. /*yExtent*/, 5. /*trenchWidth*/, 5. /*trenchDepth*/, 0., 0., false, true /*makeMask*/, Material::Si) .apply(); auto model = SmartPointer<IsotropicProcess<NumericType, D>>::New( -0.1 /*rate*/, Material::Mask); domain->saveVolumeMesh(\"trench_initial\"); Process<NumericType, D>(domain, model, 50.).apply(); // run process for 20s domain->saveVolumeMesh(\"trench_final\"); } . Python . import viennaps2d as vps domain = vps.Domain() vps.MakeTrench(domain=domain, gridDelta=0.1, xExtent=20.0, yExtent=20.0, trenchWidth=5.0, trenchDepth=5.0, taperingAngle=0.0, baseHeight=0.0, periodicBoundary=False, makeMask=True, material=vps.Material.Si ).apply() model = vps.IsotropicProcess(rate=-0.1, maskMaterial=vps.Material.Mask) domain.saveVolumeMesh(\"trench_initial\", True) vps.Process(domain, model, 50.0).apply() domain.saveVolumeMesh(\"trench_final\", True) . ", "url": "/models/prebuilt/isotropic.html", "relUrl": "/models/prebuilt/isotropic.html" - },"67": { + },"68": { "doc": "Level Set", "title": "Level Set", "content": ". ", "url": "/output/levelset.html", "relUrl": "/output/levelset.html" - },"68": { + },"69": { "doc": "Level Set", "title": "Saving the Domain", "content": "Documentation Coming soon . ", "url": "/output/levelset.html#saving-the-domain", "relUrl": "/output/levelset.html#saving-the-domain" - },"69": { + },"70": { "doc": "Level Set", "title": "Visualization", "content": "ViennaPS provides a feature enabling users to save the level set grid points explicitly for each material layer within the domain in the VTK file format. This export includes the level set value associated with each grid point. Users also have the option to specify a width parameter, determining the number of grid points around the zero level set. This functionality enhances the ability to analyze and visualize the level set information in a detailed and customizable manner. Example usage: . C++ . auto domain = ps::SmartPointer<ps::Domain<NumericType, D>>::New(); ... // create geometry in domain ... domain->saveLevelSetMesh(\"fileNamePrefix\", 3 /* width */); . Python: . domain = vps.Domain() ... # create geometry in domain ... domain.saveLevelSetMesh(fileName=\"fileNamePrefix\", width=3) . ", "url": "/output/levelset.html#visualization", "relUrl": "/output/levelset.html#visualization" - },"70": { + },"71": { "doc": "Logging", "title": "Logging", "content": ". Singleton class for thread-safe logging. The Logger class can be used to set the verbosity of the program. The verbosity levels are: . | Code | Description | . | ERROR | Log errors only | . | WARNING | Log warnings | . | INFO | Log information (e.g. remaining time) | . | TIMING | Log timing results for the different methods | . | INTERMEDIATE | Save intermediate results (disk meshes) during the process | . | DEBUG | Debug | . Example usage: Set the log level of the current program to INTERMEDIATE . C++ . ps::Logger::setLogLevel(ps::LogLevel::INTERMEDIATE); . Python . vps.Logger.setLogLevel(vps.LogLevel.INTERMEDIATE) . ", "url": "/misc/logging.html", "relUrl": "/misc/logging.html" - },"71": { + },"72": { "doc": "Material Mapping", "title": "Material Mapping", "content": ". If specified, each Level-Set in the Domain class is assigned a specific material, which can be used in a process to implement material-specific rates or similar. The following materials are currently available in the Material enum: . | Material | Numeric Value | Description | . | None | -1 | Undefined Material | . | Mask | 0 | Mask Material | . | Si | 1 | Silicon | . | SiO2 | 2 | Silicon Dioxide | . | Si3N4 | 3 | Silicon Nitride | . | SiN | 4 | Silicon Nitride | . | SiON | 5 | Silicon Oxynitride | . | SiC | 6 | Silicon Carbide | . | SiGe | 7 | Silicon Germanium | . | PolySi | 8 | Polysilicon | . | GaN | 9 | Gallium Nitride | . | W | 10 | Tungsten | . | Al2O3 | 11 | Aluminum Oxide | . | HfO2 | 12 | Hafnium Oxide | . | TiN | 13 | Titanium Nitride | . | Cu | 14 | Copper | . | Polymer | 15 | Polymer | . | Dielectric | 16 | Dielectric Material | . | Metal | 17 | Metal | . | Air | 18 | Air | . | GAS | 19 | Gas | . Example: . C++ . auto material = Material::Si; . Python . material = vps.Material.Si; . ", "url": "/domain/material.html", "relUrl": "/domain/material.html" - },"72": { + },"73": { "doc": "Multi Particle Process", "title": "Multi Particle Process", "content": "#include <psMultiParticleProcess.hpp> . The multi particle process is a simple process model that simulates either etching or deposition, where an arbitrary number of particles can be specified. The particles can be neutral or ions, and the model can be used to simulate a wide range of processes. The rate equation for combining the fluxes of the particles has to be provided by the user. ", "url": "/models/prebuilt/multiParticle.html#multi-particle-process", "relUrl": "/models/prebuilt/multiParticle.html#multi-particle-process" - },"73": { + },"74": { "doc": "Multi Particle Process", "title": "Neutral Particles", "content": "Neutral particles are characterized by their sticking probability, which quantifies the likelihood that a neutral particle will adhere to a surface upon impact. This probability ranges between 0 and 1, where: . | A sticking probability of 1 indicates that the particle will always stick to the surface. | A sticking probability of 0 indicates that the particle will always be reflected. | . The sticking probability determines the reflection behavior of neutral particles and can be defined specifically for each material within the domain. ", "url": "/models/prebuilt/multiParticle.html#neutral-particles", "relUrl": "/models/prebuilt/multiParticle.html#neutral-particles" - },"74": { + },"75": { "doc": "Multi Particle Process", "title": "Ion Particles", "content": "Ion particles are defined by their source exponent, which is the exponent of the power cosine distribution for the initial directions of the ions. The source exponent defines the distribution of the initial directions of the ions. A source exponent of 1 means that the ions are emitted isotropically, while a source exponent of 1000 means that the ions are emitted mostly perpendicular to the surface. The ion sticking function is defined by the parameters $\\theta_{min}$ and $\\theta_{max}$. The ion sticking function is a function of the incoming angle $\\theta$ that defines the probability that an ion will stick to the surface upon impact. The ion sticking function is a linear function defined as: . \\[S(\\theta) = \\begin{cases} 0 & \\text{if } \\theta < \\theta_{min} \\\\ 1 & \\text{if } \\theta > \\theta_{max} \\\\ \\frac{\\theta - \\theta_{min}}{\\theta_{max} - \\theta_{min}} & \\text{otherwise} \\end{cases}\\] Ions striking the surface at an angle denoted by $\\theta$ relative to the surface normal undergo reflection, where the angular dispersion is characterized by a cosine function centered around the direction of specular reflection defined by $\\theta_\\textrm{spec}$. This reflection process distinguishes between ions approaching the surface at glancing angles, which undergo nearly perfect specular reflection, and those striking the surface perpendicularly, which undergo nearly diffuse reflection. The ray’s reflected direction is randomly chosen from a cone around the specular direction. The opening angle of this cone is given by the incidence angle $\\theta$ or the minimum specified angle $\\theta_{min}$. Optional Parameters: . Ion can be assigned an energy which can be used to calculate a surface yield. This feature can be activated by setting the mean energy > 0 and is deactivated by setting the mean energy = 0. The energy distribution of the ions is assumed to be Gaussian with a standard deviation of sigmaEnergy. The threshold energy is the energy below which the ion will not sputter the surface, and the energy dependent yield is defined as: . \\[Y(E) = \\begin{cases} 0 & \\text{if } E < E_{\\textrm{threshold}} \\\\ \\sqrt{E} - \\sqrt{E_{\\textrm{threshold}}} & \\text{if } E \\geq E_{\\textrm{threshold}} \\end{cases}\\] The inflection angle and n are parameters of the ion energy reduction function, which is used to calculate the energy after reflection. The ion energy reduction function is defined as: . \\[E_{\\textrm{ref}}= \\begin{cases} 1-(1-A)\\frac{\\frac{\\pi}{2}-\\theta}{\\frac{\\pi}{2}-\\theta_\\textrm{inflect}} & \\text{ if } \\theta \\geqslant \\theta_\\textrm{inflect} \\\\ \\mathrm{A}\\left(\\frac{\\theta}{\\theta_\\textrm{inflect}}\\right)^{n_l} & \\text{ if } \\theta<\\theta_\\textrm{inflect}, \\end{cases}\\] where $A = (1 + n(\\frac{\\pi}{2 \\theta_\\textrm{inflect}} - 1))^{-1}$. The angle-dependent sputtering yield is defined as: . \\begin{equation} Y(\\theta) = (1 + B_{sp}(1-\\cos^2(\\theta)))\\cos(\\theta). \\end{equation} . ", "url": "/models/prebuilt/multiParticle.html#ion-particles", "relUrl": "/models/prebuilt/multiParticle.html#ion-particles" - },"75": { + },"76": { "doc": "Multi Particle Process", "title": "Implementation", "content": "// default empty constructor MultiParticleProcess() // member functions void addNeutralParticle(NumericType stickingProbability, std::string label = \"neutralFlux\") void addNeutralParticle(std::unordered_map<Material, NumericType> materialSticking, NumericType defaultStickingProbability = 1., std::string label = \"neutralFlux\") void addIonParticle(NumericType sourceExponent, NumericType thetaRMin = 0., NumericType thetaRMax = 90., NumericType minAngle = 0., NumericType B_sp = -1., NumericType meanEnergy = 0., NumericType sigmaEnergy = 0., NumericType thresholdEnergy = 0., NumericType inflectAngle = 0., NumericType n = 1, std::string label = \"ionFlux\") void setRateFunction(std::function<NumericType(std::vector<NumericType> &, const Material &)> rateFunction) . | Parameter | Description | Default Value | . | stickingProbability | Sticking probability of the neutral particle | - | . | sourceExponent | Exponent of the power cosine distribution for the initial directions of ions | - | . | thetaRMin | $\\theta_{min}$ in the ion sticking function | 0.0 | . | thetaRMax | $\\theta_{max}$ in the ion sticking function | 90.0 | . | minAngle | Minimum angle for the ion reflection | 0.0 | . | B_sp | Sputtering yield parameter | -1.0 | . | meanEnergy | Mean initial energy of the ions | 0.0 | . | sigmaEnergy | Standard deviation of the initial energy of the ions | 0.0 | . | thresholdEnergy | Threshold energy for ion sputtering | 0.0 | . | inflectAngle | Inflection angle of the ion energy reduction function | 0.0 | . | n | Exponent of the ion energy reduction function | 1.0 | . The sticking probability of the neutral particle can also be specified for each material within the domain using a map between material and sticking probability. Example usage: . C++ ... auto model = SmartPointer<MultiParticleProcess<NumericType, D>>::New(); std::unordered_map<Material, NumericType> materialSticking{{Material::Si, 0.1}, {Material::Mask, 0.5}}; model->addNeutralParticle(materialSticking, 1.0); // default sticking probability of 1 on all other materials model->addIonParticle(1000.); // for material specific rates auto rateFunction = [](std::vector<NumericType> &fluxes, const Material &material) { // fluxes contains the neutral flux at first index and ion flux at second index return material == Material::Si ? -(fluxes[0] + fluxes[1]) : 0.; }; model->setRateFunction(rateFunction); ... Python ... model = vps.MultiParticleProcess() materialSticking = {vps.Material.Si: 0.1, vps.Material.Mask: 0.5} model.addNeutralParticle(materialSticking, defaultStickingProbability=1.0) model.addIonParticle(1000.) # for material specific rates def rateFunction(fluxes, material): if material == vps.Material.Si: # fluxes contains the neutral flux at first index and ion flux at second index return -sum(fluxes) else: return 0. model.setRateFunction(rateFunction) ... ", "url": "/models/prebuilt/multiParticle.html#implementation", "relUrl": "/models/prebuilt/multiParticle.html#implementation" - },"76": { + },"77": { "doc": "Multi Particle Process", "title": "Related Examples", "content": ". | Bosch Process | . ", "url": "/models/prebuilt/multiParticle.html#related-examples", "relUrl": "/models/prebuilt/multiParticle.html#related-examples" - },"77": { + },"78": { "doc": "Multi Particle Process", "title": "Multi Particle Process", "content": " ", "url": "/models/prebuilt/multiParticle.html", "relUrl": "/models/prebuilt/multiParticle.html" - },"78": { + },"79": { "doc": "Oxide Regrowth", "title": "Oxide Regrowth", "content": "#include <psOxideRegrowth.hpp> . Modelling of oxide regrowth in during selective etching in stack of alternation SiO2 and Si3N4 layers. Based on the model presented here1. ", "url": "/models/prebuilt/oxideRegrowth.html#oxide-regrowth", "relUrl": "/models/prebuilt/oxideRegrowth.html#oxide-regrowth" - },"79": { + },"80": { "doc": "Oxide Regrowth", "title": "Related Examples", "content": ". | Oxide Regrowth | . | Tobias Reiter, Alexander Toifl, Andreas Hössinger, Lado Filipovic; Modeling Oxide Regrowth During Selective Etching in Vertical 3D NAND Structures. in: 2023 International Conference on Simulation of Semiconductor Processes and Devices (SISPAD) 2023, pp 85–88. https://doi.org/10.23919/SISPAD57422.2023.10319506 ↩ . | . ", "url": "/models/prebuilt/oxideRegrowth.html#related-examples", "relUrl": "/models/prebuilt/oxideRegrowth.html#related-examples" - },"80": { + },"81": { "doc": "Oxide Regrowth", "title": "Oxide Regrowth", "content": " ", "url": "/models/prebuilt/oxideRegrowth.html", "relUrl": "/models/prebuilt/oxideRegrowth.html" - },"81": { + },"82": { "doc": "Parsing Parameters", "title": "Parsing Parameters", "content": ". Coming soon . ", "url": "/misc/parsing.html", "relUrl": "/misc/parsing.html" - },"82": { + },"83": { "doc": "Particles - Flux Calculation", "title": "Particles - Flux Calculation", "content": ". ViennaPS integrates advanced ray tracing techniques, leveraging the power of the ViennaRay library based on Intel®’s Embree ray tracing kernel, into the realm of process simulations. This combination enables precise and efficient flux calculations within topography simulations. This process includes launching rays from a source and tracing their paths as they interact with the surface geometry. Ray tracing allows for the simulation of complex phenomena such as shadows, reflections, and transmission of energy through transparent materials. ViennaPS integrates ViennaRay functionality through the viennaray::Particle class, providing users with a versatile interface to define the key characteristics of the simulated particle species and tailor their behavior upon surface interactions, including reflective properties. Within the particle class, users can fine-tune parameters governing the initial state of particles, enabling precise control over their interactions with material surfaces. For an in-depth understanding of the viennaray::Particle class and its functionalities, users are encouraged to refer to the detailed documentation available within the ViennaRay documentation. Within ViennaPS, a process model has the flexibility to encompass multiple particle species, each contributing distinct characteristics to the simulation. The fluxes computed from these particles are conveniently accessible through the SurfaceModel class. This interface allows users to seamlessly integrate the particle flux data into a physical model, facilitating the simulation of intricate physical processes. By leveraging the calculated fluxes within the surface model, users can construct comprehensive simulations that capture the nuanced interplay of particles and materials, offering a robust framework for exploring diverse scenarios in process simulation. ", "url": "/models/custom/particle.html", "relUrl": "/models/custom/particle.html" - },"83": { + },"84": { "doc": "Planarize Geometry", "title": "Planarize a Geometry", "content": "#include <psPlanarize.hpp> . With this class, the user is able to planarize the domain at a specified cutoff position. The planarization process involves subtracting a plane from all materials within the domain using a boolean operation. Example usage: . C++ . ps::Planarize<double, 3>(domain, 0. /*cut off height in z-direction*/).apply(); . Python . vps.Planarize(geometry=domain, cutoffHeight=0.).apply() . ", "url": "/misc/planarize.html#planarize-a-geometry", "relUrl": "/misc/planarize.html#planarize-a-geometry" - },"84": { + },"85": { "doc": "Planarize Geometry", "title": "Planarize Geometry", "content": " ", "url": "/misc/planarize.html", "relUrl": "/misc/planarize.html" - },"85": { + },"86": { "doc": "Plane Geometry", "title": "Plane Geometry", - "content": "#include <psMakePlane.hpp> . The MakePlane class offers a straightforward approach to generate a plane as a level-set within your domain. This utility is useful for crafting substrates with any material. You have the flexibility to append the plane to an existing geometry or create a new one. In 3D, the plane is generated with a normal direction in the positive z direction, while in 2D, it is oriented in the positive y direction. The plane is centered around the origin, with the total specified extent and height. Additionally, you can opt for a periodic boundary in the x and y directions. // namespace viennaps // New geometry MakePlane(DomainType domain, const NumericType gridDelta, const NumericType xExtent, const NumericType yExtent, const NumericType height, const bool periodicBoundary = false, const Material material = Material::None) // Add to existing geometry MakePlane(DomainType domain, NumericType height = 0., const Material material = Material::None) . Depending on the specific constructor invoked for the plane-builder, the behavior varies: the domain may be cleared, and a new plane inserted, or the plane can be added to the existing geometry in the domain. A detailed description of the parameters follows: . | Parameter | Description | Type | . | domain | The Domain object passed in a smart pointer. | SmartPointer<Domain<NumericType, D>> | . | gridDelta | Represents the grid spacing or resolution used in the simulation. | NumericType | . | xExtent | Defines the extent of the plane geometry in the x-direction. | NumericType | . | yExtent | Defines the extent of the plane geometry in the y-direction. | NumericType | . | height | Sets the position of the plane in y(2D)/z(3D) direction. | NumericType | . | periodicBoundary | (Optional) If set to true, enables periodic boundaries in both x and y directions. Default is set to false. | bool | . | material | (Optional) Specifies the material used for the plane. Default is set to Material::None. | Material | . Example usage: . | Creating a new domain: | . C++ . // namespace viennaps auto domain = SmartPointer<Domain<NumericType, D>>::New(); MakePlane<NumericType, D>(domain, 0.5, 10.0, 10.0, 0.0, false, Material::Si).apply(); . Python . domain = vps.Domain() vps.MakePlane(domain=domain, gridDelta=0.5, xExtent=10.0, yExtent=10.0, height=0.0, periodicBoundary=False, material=vps.Material.Si, ).apply() . | Adding plane to existing domain | . C++ . auto domain = SmartPointer<Domain<NumericType, D>>::New(); psMakePlane<NumericType, D>(domain, 10.0, Material::Si).apply(); . Python . domain = vps.Domain() vps.MakePlane(domain=domain, height=0.0, material=vps.Material.Si, ).apply() . ", + "content": "#include <geometries/psMakePlane.hpp> . The MakePlane class offers a straightforward approach to generate a plane as a level-set within your domain. This utility is useful for crafting substrates with any material. You have the flexibility to append the plane to an existing geometry or create a new one. In 3D, the plane is generated with a normal direction in the positive z direction, while in 2D, it is oriented in the positive y direction. The plane is centered around the origin, with the total specified extent and height. Additionally, you can opt for a periodic boundary in the x and y directions. // namespace viennaps MakePlane(psDomainType domain, NumericType baseHeight = 0., Material material = Material::Si, bool addToExisting = false) MakePlane(psDomainType domain, NumericType gridDelta, NumericType xExtent, NumericType yExtent, NumericType baseHeight, bool periodicBoundary = false, Material material = Material::Si) . Depending on the specific constructor invoked for the plane-builder, the behavior varies: the domain may be cleared, and a new plane inserted, or the plane can be added to the existing geometry in the domain. A detailed description of the parameters follows: . | Parameter | Type | Description | Applicable Constructor | . | domain | psDomainType | The simulation domain. | Both | . | baseHeight | NumericType | Height at which the plane is placed (default: 0.). | Both | . | material | Material | Material of the plane (default: Material::Si). | Both | . | addToExisting | bool | If true, the plane is added to an existing geometry instead of creating a new one (default: false). | First constructor only | . | gridDelta | NumericType | Grid spacing in the simulation domain. | Second constructor only | . | xExtent | NumericType | Extent of the domain in the x-direction. | Second constructor only | . | yExtent | NumericType | Extent of the domain in the y-direction. | Second constructor only | . | periodicBoundary | bool | If true, enables periodic boundary conditions (default: false). | Second constructor only | . Note: . | The first constructor requires that the domain is already configured and allows adding a plane to an existing geometry. | The second constructor creates a new geometry and sets up the domain using gridDelta, xExtent, and yExtent. | . Example usage: . | Creating a new domain: | . C++ . // namespace viennaps auto domain = SmartPointer<Domain<NumericType, D>>::New(0.5, 10., 10., BoundaryType::REFLECTIVE_BOUNDARY); MakePlane<NumericType, D>(domain, 0.0, Material::Si).apply(); . Python . domain = vps.Domain(gridDelta=0.5, xExtent=10.0, yExtent=10.0, boundaryType=vps.BoundaryType.REFLECTIVE_BOUNDARY) vps.MakePlane(domain=domain, baseHeight=0.0, material=vps.Material.Si, ).apply() . | Adding plane to existing domain | . C++ . MakePlane<NumericType, D>(domain, 10.0, Material::Si, true).apply(); . Python . vps.MakePlane(domain=domain, height=0.0, material=vps.Material.Si, addToExisting=True ).apply() . ", "url": "/geo/basic/plane.html", "relUrl": "/geo/basic/plane.html" - },"86": { + },"87": { "doc": "Point Data", "title": "Point Data", "content": ". The viennals::PointData class is designed to hold data associated with points in space. It’s a generic class that can work with any data type T that satisfies the lsConcepts::IsFloatingPoint concept. By default, it uses double as the data type. Member Types: . | ScalarDataType: A type alias for a vector of T type elements. This is used to represent scalar data. | VectorDataType: A type alias for a vector of arrays, each containing 3 elements of T type. This is used to represent vector data. | . Public Methods: . | insertNextScalarData: This method inserts a new scalar data its corresponding label. | . ", "url": "/misc/pointData.html", "relUrl": "/misc/pointData.html" - },"87": { + },"88": { "doc": "Single Particle Process", "title": "Single Particle Process", "content": "#include <psSingleParticleProcess.hpp> . The single particle process is a simple process model that simulates either etching or deposition, assuming a single particle species. The process is specified by the rate, the particle sticking coefficient, and the exponent in the power cosine distribution of the initial particle directions. The rate can be either negative or positive, corresponding to etching or deposition, respectively. The sticking coefficient is the probability that a particle will stick to the surface upon impact, thus controlling the number of diffusive reflections from the surface. The exponent in the power cosine distribution of the initial particle directions is a measure of the angular spread of the initial particle directions. A higher exponent corresponds to a more focused beam of particles. Additionally, mask materials can be specified, where the rate is assumed to be zero, or map between material and rate can be defined. ", "url": "/models/prebuilt/singleParticle.html", "relUrl": "/models/prebuilt/singleParticle.html" - },"88": { + },"89": { "doc": "Single Particle Process", "title": "Implementation", "content": "SingleParticleProcess(const NumericType rate = 1., const NumericType stickingProbability = 1., const NumericType sourceDistributionPower = 1., const Material maskMaterial = Material::None) SingleParticleProcess(const NumericType rate, const NumericType stickingProbability, const NumericType sourceDistributionPower, const std::vector<Material> maskMaterials) SingleParticleProcess(std::unordered_map<Material, NumericType> materialRates, NumericType stickingProbability, NumericType sourceDistributionPower) . | Parameter | Description | Default Value | . | rate | Default rate of the single particle process, if no material specific rates are defined | 1.0 | . | stickingProbability | Sticking probability of particles | 1.0 | . | sourceDistributionPower | Power of the power cosine source distribution | 1.0 | . | maskMaterial | Mask material | Material::None | . Rates can also be specified for specific materials using a map between material and rate. Example usage: . C++ ... // for a single mask material auto model = SmartPointer<SingleParticleProcess<NumericType, D>>::New(1., 0.1, 1., maskMaterial); ... // for multiple mask materials auto model = SmartPointer<SingleParticleProcess<NumericType, D>>::New(1., 0.1, 1., {mask1, mask2}); // for material specific rates std::unordered_map<Material, NumericType> materialRates = {{Material::Si, 1.}, {Material::SiO2, 0.5}}; auto model = SmartPointer<SingleParticleProcess<NumericType, D>>::New(materialRates, 0.1, 1.); ... Python ... model = vps.SingleParticleProcess(rate=1., stickingProbability=0.1, sourceExponent=1., maskMaterials=[maskMaterial]) # using material specific rates rates = {vps.Material.Si: 1., vps.Material.SiO2: 0.5} model = vps.SingleParticleProcess(materialRates=rates, stickingProbability=0.1, sourceExponent=1.) ... ", "url": "/models/prebuilt/singleParticle.html#implementation", "relUrl": "/models/prebuilt/singleParticle.html#implementation" - },"89": { + },"90": { "doc": "Single Particle Process", "title": "Related Examples", "content": ". | Trench Deposition | . ", "url": "/models/prebuilt/singleParticle.html#related-examples", "relUrl": "/models/prebuilt/singleParticle.html#related-examples" - },"90": { + },"91": { "doc": "Primary Source Direction", "title": "Primary Source Direction", "content": ". The primary source direction is an optional parameter that allows users to tailor the initial particle direction distribution by specifying a tilt during flux calculation from a source plane. In cases where no primary source direction is explicitly defined, it defaults to being aligned with the surface normal of the source plane. If there is no intention to tilt the initial distribution, it is advisable not to set the primary source direction equal to the source plane normal. Instead, using the default value is recommended for a slight performance advantage. Example usage: . auto myModel = ps::SmartPointer<ps::ProcessModel<NumericType, D>>::New(); double tiltingAngle = 30. * M_PI / 180.; // tilting angle of 30 degree double x = -std::sin(tiltingAngle); double y = -std::cos(tiltingAngle); myModel->setPrimaryDirection({x, y, -1.}); . ", "url": "/models/custom/sourceDirection.html", "relUrl": "/models/custom/sourceDirection.html" - },"91": { + },"92": { "doc": "Stack Geometry", "title": "Stack Geometry", - "content": "#include <psMakeStack.hpp> . The MakeStack generates a stack of alternating SiO2/Si3N4 layers featuring an optionally etched hole (3D) or trench (2D) at the center. The stack emerges in the positive z direction (3D) or y direction (2D) and is centered around the origin, with its x/y extent specified. Users have the flexibility to introduce periodic boundaries in the x and y directions. Additionally, the stack can incorporate a top mask with a central hole of a specified radius or a trench with a designated width. This versatile functionality enables users to create diverse and customized structures for simulation scenarios. // namespace viennaps MakeStack(DomainType domain, const NumericType gridDelta, const NumericType xExtent, const NumericType yExtent, const int numLayers, const NumericType layerHeight, const NumericType substrateHeight, const NumericType holeRadius, const NumericType trenchWidth, const NumericType maskHeight, const bool periodicBoundary = false) . | Parameter | Description | Type | . | domain | Specifies the domain type for the stack geometry. | SmartPointer<Domain<NumericType, D>> | . | gridDelta | Represents the grid spacing or resolution used in the simulation. | NumericType | . | xExtent | Defines the extent of the stack geometry in the x-direction. | NumericType | . | yExtent | Specifies the extent of the stack geometry in the y-direction. | NumericType | . | numLayers | Sets the number of layers in the stack. | int | . | layerHeight | Determines the height of each layer in the stack. | NumericType | . | substrateHeight | Specifies the height of the substrate. | NumericType | . | holeRadius | Sets the radius of the hole. | NumericType | . | trenchWidth | Determines the width of the trench. | NumericType | . | maskHeight | Specifies the height of the mask. | NumericType | . | periodicBoundary | (Optional) If set to true, enables periodic boundaries. Default is set to false. | bool | . trenchWidth and holeRadius can only be used mutually exclusive. I.e., if one is set, the other has to be set to 0. Example usage: . C++ . // namespace viennaps auto domain = SmartPointer<Domain<NumericType, D>>::New(); MakeStack<NumericType, D>(domain, 0.5, 10.0, 10.0, 5, 5.0, 10., 0.0, 5.0, 0.0, false) .apply(); . Python . domain = vps.Domain() vps.MakeStack(domain=domain, gridDelta=0.5, xExtent=10.0, yExtent=10.0, numLayers=5, layerHeight=5.0, substrateHeight=10.0, holeRadius=0.0, trenchWidth=5.0, maskHeight=0.0, periodicBoundary=False, ).apply() . ", + "content": "#include <geometries/psMakeStack.hpp> . The MakeStack generates a stack of alternating SiO2/Si3N4 layers featuring an optionally etched hole (3D) or trench (2D) at the center. The stack emerges in the positive z direction (3D) or y direction (2D) and is centered around the origin, with its x/y extent specified. Users have the flexibility to introduce periodic boundaries in the x and y directions. Additionally, the stack can incorporate a top mask with a central hole of a specified radius or a trench with a designated width. This versatile functionality enables users to create diverse and customized structures for simulation scenarios. // namespace viennaps // with DomainSetup configured (v3.3.0) MakeStack(psDomainType domain, int numLayers, NumericType layerHeight, NumericType substrateHeight, NumericType holeRadius, NumericType trenchWidth, NumericType maskHeight, NumericType taperAngle, bool halfStack = false, Material maskMaterial = Material::Mask) MakeStack(DomainType domain, NumericType gridDelta, NumericType xExtent, NumericType yExtent, int numLayers, NumericType layerHeight, NumericType substrateHeight, NumericType holeRadius, NumericType trenchWidth, NumericType maskHeight, bool periodicBoundary = false) . | Parameter | Description | Type | . | domain | Specifies the domain type for the stack geometry. | SmartPointer<Domain<NumericType, D>> | . | gridDelta | Represents the grid spacing or resolution used in the simulation. | NumericType | . | xExtent | Defines the extent of the stack geometry in the x-direction. | NumericType | . | yExtent | Specifies the extent of the stack geometry in the y-direction. | NumericType | . | numLayers | Sets the number of layers in the stack. | int | . | layerHeight | Determines the height of each layer in the stack. | NumericType | . | substrateHeight | Specifies the height of the substrate. | NumericType | . | holeRadius | Sets the radius of the hole. | NumericType | . | trenchWidth | Determines the width of the trench. | NumericType | . | maskHeight | Specifies the height of the mask. | NumericType | . | periodicBoundary | (Optional) If set to true, enables periodic boundaries. Default is set to false. | bool | . trenchWidth and holeRadius can only be used mutually exclusive. I.e., if one is set, the other has to be set to 0. Example usage: . C++ . // namespace viennaps auto domain = SmartPointer<Domain<NumericType, D>>::New(); MakeStack<NumericType, D>(domain, 0.5, 10.0, 10.0, 5, 5.0, 10., 0.0, 5.0, 0.0, false) .apply(); . Python . domain = vps.Domain() vps.MakeStack(domain=domain, gridDelta=0.5, xExtent=10.0, yExtent=10.0, numLayers=5, layerHeight=5.0, substrateHeight=10.0, holeRadius=0.0, trenchWidth=5.0, maskHeight=0.0, periodicBoundary=False, ).apply() . ", "url": "/geo/basic/stack.html", "relUrl": "/geo/basic/stack.html" - },"92": { + },"93": { "doc": "Surface Mesh", "title": "Surface Mesh", "content": ". To save a triangulated mesh of the geometry surface, users can use the domain member function saveSurfaceMesh. The surface mesh also contains material information is the optional parameter addMaterialIds is set to true. Example usage: . C++ . auto domain = ps::SmartPointer<ps::Domain<NumericType, D>>::New(); ... // create geometry in domain ... domain->saveSurfaceMesh(\"fileName\", true); . Python: . domain = vps.Domain() ... # create geometry in domain ... domain.saveSurfaceMesh(fileName=\"fileName\", addMaterialIds=True) . ", "url": "/output/surface.html", "relUrl": "/output/surface.html" - },"93": { + },"94": { "doc": "Surface and Material Interfaces", "title": "Surface and Material Interfaces", "content": ". The surface, as well as the material interfaces, are described implicitly by a level set (LS) function $\\phi(\\vec{x})$ which is defined at every point $\\vec{x}$ in space. This function is obtained using signed distance transforms, describing the surface $S$ as the zero LS: . \\[S = \\{\\vec{x}\\!: \\, \\phi(\\vec{x}) = 0 \\}.\\] If the domain contains multiple LSs, the top LS wraps the entire structure and therefore represents the surface, while all other LS functions just describe material interfaces. Formally, the different material regions can be described by ${M}$ LS functions satisfying . \\[\\Phi_k(\\vec{x}) \\leq 0 \\quad \\Leftrightarrow \\quad \\vec{x} \\in \\bigcup_{i=1}^k \\mathcal{M}_i.\\] Here $\\Phi_M$ describes the entire structure $\\mathcal{M}$, and the other LS functions correspond to material interfaces. When inserting a new LS into the domain, an automatic wrapping process ensues. This process involves enveloping all existing Level-Sets through a Boolean operation, specifically a union with the topmost LS. It’s worth noting, though, that this default behavior is not obligatory. In instances where a specialized domain structure is desired, users have the option to circumvent this automatic wrapping mechanism. ", "url": "/domain/surface.html#surface-and-material-interfaces", "relUrl": "/domain/surface.html#surface-and-material-interfaces" - },"94": { + },"95": { "doc": "Surface and Material Interfaces", "title": "Surface and Material Interfaces", "content": " ", "url": "/domain/surface.html", "relUrl": "/domain/surface.html" - },"95": { + },"96": { "doc": "Surface Model", "title": "Surface Model", "content": ". ", "url": "/models/custom/surfaceModel.html", "relUrl": "/models/custom/surfaceModel.html" - },"96": { + },"97": { "doc": "Surface Model", "title": "Summary", "content": ". | The SurfaceModel class is used to describe surface reactions, combining particle fluxes with the surface chemical reactions. | The velocities used for surface advection in a time step are calculated through the calculateVelocities() function. | Surface coverages can be used to track the coverage a chemical species on the surface through a time step. | The coverages can be initialized to equilibrium by iteratively calculating the fluxes on the surface and updating the coverages. The number of iterations to initialize the coverages can be specified through the Process. | Coverages and fluxes are stored as viennals::PointData. | . The SurfaceModel class serves as a comprehensive framework for detailing surface chemistries. Users have the flexibility to create a customized child class where they can precisely dictate how surface coverages evolve, driven by the rates at which particles impact the surface. One key feature is the capability to monitor surface coverages, providing insights into the presence of chemical species on the surface throughout a simulation’s time step. To initialize the coverage data vector, the method initializeCoverages() is employed. void initializeCoverages(unsigned numSurfacePoints) override { // a single set of coverages is initialized here std::vector<NumericType> someCoverage(numSurfacePoints, 0); coverages = ps::SmartPointer<viennals::PointData<NumericType>>::New(); coverages->insertNextScalarData(someCoverage, \"someCoverage\"); } . To use coverages, it is essential to initialize the class member coverages with a new instance of viennals::PointData. If the coverages variable is left as nullptr, no coverages will be utilized during the simulation. To initialize a single coverage, a container with a size equal to the number of surface points must be created and inserted into the viennals::PointData. Additionally, a name for the coverage can be specified during initialization. This designated name should then be used in updateCoverages() or calculateVelocities() to access the specific coverage as needed. To ensure accurate representations, coverages can be initialized to equilibrium by iteratively calculating surface fluxes and updating coverages. The initialization process’s iteration count is customizable through the Process interface. The method updateCoverages() encapsulates the user-defined description of surface coverage evolution in each iteration. Since coverages is a member of the psSurfaceModel class, it can be accessed in every member function. void updateCoverages(ps::SmartPointer<viennals::PointData<NumericType>> particleFluxes, const std::vector<NumericType> &materialIds) override { auto myCoverage = coverages->getScalarData(\"someCoverage\"); // update coverage from calculated fluxes } . Within the psSurfaceModel class, the method calculateVelocities() utilizes fluxes obtained through ray tracing, to provide the velocities used for surface advection in a time step. Here the fluxes from particle, as well as previously calculated coverages can be accessed and combined to yield the final velocity at each surface point. The function should return a SmartPointer to a new vector, containing the velocity at each surface point. In order to create a custom surface the user has to interface the SurfaceModel class. An example implementation of a custom surface model is given below: . template <typename NumericType> class myCustomSurfaceModel : public ps::SurfaceModel<NumericType> { public: using ps::SurfaceModel<NumericType>::coverages; // needed to access coverages void initializeCoverages(unsigned numSurfacePoints) override { // a single set of coverages is initialized here std::vector<NumericType> someCoverage(numSurfacePoints, 0); coverages = ps::SmartPointer<viennals::PointData<NumericType>>::New(); coverages->insertNextScalarData(someCoverage, \"someCoverage\"); } void updateCoverages(ps::SmartPointer<viennals::PointData<NumericType>> particleFluxes, const std::vector<NumericType> &materialIds) override { auto myCoverage = coverages->getScalarData(\"someCoverage\"); // update coverage from calculated fluxes } ps::SmartPointer<std::vector<NumericType>> calculateVelocities( ps::SmartPointer<viennals::PointData<NumericType>> rates, const std::vector<std::array<NumericType, 3>> &coordinates, const std::vector<NumericType> &materialIds) override { // use coverages and rates here to calculate the velocity here return ps::SmartPointer<std::vector<NumericType>>::New( *rates->getScalarData(\"particleRate\")); } }; . ", "url": "/models/custom/surfaceModel.html#summary", "relUrl": "/models/custom/surfaceModel.html#summary" - },"97": { + },"98": { "doc": "Trench Geometry", "title": "Trench Geometry", - "content": "#include <psMakeTrench.hpp> . The MakeTrench class is used to generate a new trench geometry extending in the z (3D) or y (2D) direction, centrally positioned at the origin with the total extent specified in the x and y directions. The trench configuration may include periodic boundaries in both the x and y directions. Users have the flexibility to define the trench’s width, depth, and incorporate tapering with a designated angle. Moreover, the trench can serve as a mask, applying the specified material exclusively to the bottom while the remaining portion adopts the mask material. // namespace viennaps MakeTrench(DomainType domain, const NumericType gridDelta, const NumericType xExtent, const NumericType yExtent, const NumericType trenchWidth, const NumericType trenchDepth, const NumericType taperingAngle = 0., // in degrees const NumericType baseHeight = 0., const bool periodicBoundary = false, const bool makeMask = false, const Material material = Material::None) . | Parameter | Description | Type | . | domain | Specifies the type of domain for the trench geometry. | SmartPointer<Domain<NumericType, D>> | . | gridDelta | Represents the grid spacing or resolution used in the simulation. | NumericType | . | xExtent | Defines the extent of the trench geometry in the x-direction. | NumericType | . | yExtent | Specifies the extent of the trench geometry in the y-direction. | NumericType | . | trenchWidth | Sets the width of the trench. | NumericType | . | trenchDepth | Determines the depth of the trench. | NumericType | . | taperingAngle | (Optional) Specifies the angle of tapering for the trench geometry in degrees. Default is set to 0. | NumericType | . | baseHeight | (Optional) Sets the base height of the trench. Default is set to 0. | NumericType | . | periodicBoundary | (Optional) If set to true, enables periodic boundaries in both x and y directions (only applicable in 3D). Default is set to false. | bool | . | makeMask | (Optional) If set to true, allows the trench to function as a mask, with specified material applied only to the bottom. Default is set to false. | bool | . | material | (Optional) Specifies the material used for the trench. Default is set to Material_None. | Material | . Example usage: . C++ . // namespace viennaps auto domain = SmartPointer<Domain<NumericType, D>>::New(); MakeTrench<NumericType, D>(domain, 0.5, 10.0, 10.0, 5.0, 5.0, 10., 0., false, false, Material::Si) .apply(); . Python . domain = vps.Domain() vps.MakeTrench(domain=domain, gridDelta=0.5, xExtent=10.0, yExtent=10.0, trenchWidth=5.0, trenchDepth=5.0, taperingAngle=10.0, baseHeight=0.0, periodicBoundary=False, makeMask=False, material=vps.Material.Si, ).apply() . ", + "content": "#include <geometries/psMakeTrench.hpp> . The MakeTrench class is used to generate a new trench geometry extending in the z (3D) or y (2D) direction, centrally positioned at the origin with the total extent specified in the x and y directions. The trench configuration may include periodic boundaries in both the x and y directions. Users have the flexibility to define the trench’s width, depth, and incorporate tapering with a designated angle. Moreover, the trench can serve as a mask, applying the specified material exclusively to the bottom while the remaining portion adopts the mask material. // namespace viennaps // with DomainSetup configured (v3.3.0) MakeTrench(psDomainType domain, NumericType trenchWidth, NumericType trenchDepth, NumericType trenchTaperAngle = 0, NumericType maskHeight = 0, NumericType maskTaperAngle = 0, bool halfTrench = false, Material material = Material::Si, Material maskMaterial = Material::Mask) MakeTrench(DomainType domain, NumericType gridDelta, NumericType xExtent, NumericType yExtent, NumericType trenchWidth, NumericType trenchDepth, NumericType taperingAngle = 0., // in degrees NumericType baseHeight = 0., bool periodicBoundary = false, bool makeMask = false, Material material = Material::Si) . | Parameter | Description | Type | . | domain | Specifies the type of domain for the trench geometry. | SmartPointer<Domain<NumericType, D>> | . | gridDelta | Represents the grid spacing or resolution used in the simulation. | NumericType | . | xExtent | Defines the extent of the trench geometry in the x-direction. | NumericType | . | yExtent | Specifies the extent of the trench geometry in the y-direction. | NumericType | . | trenchWidth | Sets the width of the trench. | NumericType | . | trenchDepth | Determines the depth of the trench. | NumericType | . | taperingAngle | (Optional) Specifies the angle of tapering for the trench geometry in degrees. Default is set to 0. | NumericType | . | baseHeight | (Optional) Sets the base height of the trench. Default is set to 0. | NumericType | . | periodicBoundary | (Optional) If set to true, enables periodic boundaries in both x and y directions (only applicable in 3D). Default is set to false. | bool | . | makeMask | (Optional) If set to true, allows the trench to function as a mask, with specified material applied only to the bottom. Default is set to false. | bool | . | material | (Optional) Specifies the material used for the trench. Default is set to Material_None. | Material | . Example usage: . C++ . // namespace viennaps auto domain = SmartPointer<Domain<NumericType, D>>::New(); MakeTrench<NumericType, D>(domain, 0.5, 10.0, 10.0, 5.0, 5.0, 10., 0., false, false, Material::Si) .apply(); . Python . domain = vps.Domain() vps.MakeTrench(domain=domain, gridDelta=0.5, xExtent=10.0, yExtent=10.0, trenchWidth=5.0, trenchDepth=5.0, taperingAngle=10.0, baseHeight=0.0, periodicBoundary=False, makeMask=False, material=vps.Material.Si, ).apply() . ", "url": "/geo/basic/trench.html", "relUrl": "/geo/basic/trench.html" - },"98": { + },"99": { "doc": "Units", "title": "Units", "content": ". Physical models, like the SF6O2 or Fluorocarbon etching models, require the user to specify the units of the input parameters. The user must set the length and time units before creating a model using the units module. The units are global parameters and apply to every model and process in the program. Example usage: . C++ . using namespace viennaps; units::setLengthUnits(units::LengthUnit::NANOMETER) units::setTimeUnits(units::TimeUnit::MINUTE) // the units can also be specified using strings units::setLengthUnits(\"nm\") // or \"nanometer\" units::setTimeUnits(\"min\") // or \"minute\" . Python . # in Python strings have to be used to set the units vps.setLengthUnits(\"nm\") # or \"nanometer\" vps.setTimeUnits(\"min\") # or \"minute\" . ", "url": "/misc/units.html", "relUrl": "/misc/units.html" - },"99": { + },"100": { "doc": "Velocity Field", "title": "Velocity Field", "content": ". ", "url": "/models/custom/velocityField.html", "relUrl": "/models/custom/velocityField.html" - },"100": { + },"101": { "doc": "Velocity Field", "title": "Surface Velocity Extension", "content": "| Option | Description | . | 0 | Do not translate level set ID to surface ID. This should be enabled if the surface velocity is only provided in the psVelocityField class and not through the psSurfaceModel class. | . | 1 | Use unordered map to translate level set ID to surface ID. | . | 2 | Use KD-tree to translate level set ID to surface ID. The KD-tree uses a nearest neighbor lookup to determine the closest surface point and according velocity. | . ", "url": "/models/custom/velocityField.html#surface-velocity-extension", "relUrl": "/models/custom/velocityField.html#surface-velocity-extension" - },"101": { + },"102": { + "doc": "Volume Mesh", + "title": "Volume Mesh", + "content": ". Volume meshes can be saved using the domain member function saveVolumeMesh. The mesh is solely for visualization purposes and can not be used for further simulations. Example usage: . C++ . auto domain = ps::SmartPointer<ps::Domain<NumericType, D>>::New(); ... // create geometry in domain ... domain->saveVolumeMesh(\"fileName\"); . Python: . domain = vps.Domain() ... # create geometry in domain ... domain.saveVolumeMesh(fileName=\"fileName\") . ", + "url": "/output/volume.html", + + "relUrl": "/output/volume.html" + },"103": { "doc": "Volume", "title": "Volume", "content": ". A Cell-Set (CS) is used to store and track volume information in the domain. The CS is stored over the whole simulation domain, above and/or below the surface described by the Level-Set. It uses the same grid as the Level-Set, such that each Level-Set grid point acts as the corner of the cells around the point. To determine which material region a cell lies in, the LS values at the cell corner of the material interface are inspected. If the sum of the values is negative the cell belongs to the underlying material, otherwise it represents the material on the other side of the interface. To find a cell in which an arbitrary point in space resides, a bounding volume hierarchy (BVH) is built on top of the CS. This allows for fast access to random cells in the CS. Additionally, cell-neighbor relations are established when setting up the CS. This allows for quick access to neighbor cells. ", "url": "/domain/volume.html", "relUrl": "/domain/volume.html" - },"102": { + },"104": { "doc": "Volume", "title": "How to use the Cell-Set", "content": "To generate the CS from your domain, use the function: . auto domain = SmartPointer<Domain<NumericType, D>>::New() ... // Add level-sets to domain ... domain->generateCellSet(position, material, isCellSetAboveSurface) . The position parameter describes the location of the cell set surface. With the parameter isCellSetAboveSurface one can specify whether the Cell-Set should be placed above or below the surface. If the Cell-Set is above the surface it covers all material in the domain and the position parameter should be set higher than the highest surface point in the domain. ", "url": "/domain/volume.html#how-to-use-the-cell-set", "relUrl": "/domain/volume.html#how-to-use-the-cell-set" - },"103": { + },"105": { "doc": "Volume", "title": "Related Examples", "content": ". | Volume Model | Oxide Regrowth | . ", "url": "/domain/volume.html#related-examples", "relUrl": "/domain/volume.html#related-examples" - },"104": { - "doc": "Volume Mesh", - "title": "Volume Mesh", - "content": ". Volume meshes can be saved using the domain member function saveVolumeMesh. The mesh is solely for visualization purposes and can not be used for further simulations. Example usage: . C++ . auto domain = ps::SmartPointer<ps::Domain<NumericType, D>>::New(); ... // create geometry in domain ... domain->saveVolumeMesh(\"fileName\"); . Python: . domain = vps.Domain() ... # create geometry in domain ... domain.saveVolumeMesh(fileName=\"fileName\") . ", - "url": "/output/volume.html", - - "relUrl": "/output/volume.html" } } diff --git a/docs/_site/deps/index.html b/docs/_site/deps/index.html index 1bd9ea1b..91317572 100644 --- a/docs/_site/deps/index.html +++ b/docs/_site/deps/index.html @@ -1 +1 @@ - Dependencies | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Dependencies


ViennaLS

ViennaLS forms the foundation of the process simulator, applying the level-set surface representation concepts for topography simulations. This module not only stores the level-set surface but also encompasses essential algorithms for geometry initialization, level-set value manipulation based on a velocity field, surface feature analysis, and seamless conversion of the level-set representation to other commonly employed material representations in device simulators.

ViennaRay

ViennaPS relies on ViennaRay, a top-down Monte Carlo flux calculation library, to carry out essential flux calculations. This library is built upon Intel®’s ray tracing kernel, Embree. Crafted with a focus on efficiency and high-performance ray tracing, ViennaRay ensures a seamless user experience through its straightforward and user-friendly interface.

In the top-down Monte Carlo approach, a large number of pseudo-particles are launched from a source plane situated above the surface, and their points of impact on the surface are determined. These pseudo-particles are initialized with a uniform initial position on the source plane and an initial direction that follows a power-cosine distribution. Each pseudo-particle carries a specific payload, representing a fraction of the total source flux. Upon reaching the surface, the current payload of the pseudo-particle contributes to the flux at that particular surface location.

Furthermore, pseudo-particles have the capability to undergo reflection from the surface. The payload of a pseudo-particle undergoes reduction by the sticking coefficient during reflection. As a result, a pseudo-particle is tracked until its payload falls below a certain threshold or until it exits the simulation domain. This tracking mechanism provides a comprehensive understanding of the particle dynamics during its interaction with the sample surface.


+ Dependencies | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Dependencies


ViennaLS

ViennaLS forms the foundation of the process simulator, applying the level-set surface representation concepts for topography simulations. This module not only stores the level-set surface but also encompasses essential algorithms for geometry initialization, level-set value manipulation based on a velocity field, surface feature analysis, and seamless conversion of the level-set representation to other commonly employed material representations in device simulators.

ViennaRay

ViennaPS relies on ViennaRay, a top-down Monte Carlo flux calculation library, to carry out essential flux calculations. This library is built upon Intel®’s ray tracing kernel, Embree. Crafted with a focus on efficiency and high-performance ray tracing, ViennaRay ensures a seamless user experience through its straightforward and user-friendly interface.

In the top-down Monte Carlo approach, a large number of pseudo-particles are launched from a source plane situated above the surface, and their points of impact on the surface are determined. These pseudo-particles are initialized with a uniform initial position on the source plane and an initial direction that follows a power-cosine distribution. Each pseudo-particle carries a specific payload, representing a fraction of the total source flux. Upon reaching the surface, the current payload of the pseudo-particle contributes to the flux at that particular surface location.

Furthermore, pseudo-particles have the capability to undergo reflection from the surface. The payload of a pseudo-particle undergoes reduction by the sticking coefficient during reflection. As a result, a pseudo-particle is tracked until its payload falls below a certain threshold or until it exits the simulation domain. This tracking mechanism provides a comprehensive understanding of the particle dynamics during its interaction with the sample surface.


diff --git a/docs/_site/domain/functions.html b/docs/_site/domain/functions.html index 99b8f9f3..68d77ed8 100644 --- a/docs/_site/domain/functions.html +++ b/docs/_site/domain/functions.html @@ -1,13 +1,23 @@ - Member Functions | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Domain Member Functions


Constructors

Domain()
-Domain(SmartPointer<Domain> passedDomain)
-Domain(SmartPointer<viennals::Domain<NumericType, D>> passedLevelSet, bool generateCellSet = false, 
-       const NumericType passedCellSetDepth = 0., const bool passedCellSetPosition = false)
-Domain(lsDomainsType passedLevelSets, bool generateCellSet = false, 
-       const NumericType passedCellSetDepth = 0., const bool passedCellSetPosition = false)
-

Member Functions

void deepCopy(SmartPointer<Domain> passedDomain)
-void insertNextLevelSet(SmartPointer<viennals::Domain<NumericType, D>> passedLevelSet, bool wrapLowerLevelSet = true)
-void insertNextLevelSetAsMaterial(SmartPointer<viennals::Domain<NumericType, D>> passedLevelSet, const Material material, 
-                                  bool wrapLowerLevelSet = true)
+             Member Functions | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

Domain Member Functions


Constructors

// namespace viennaps
+Domain()
+Domain(SmartPointer<Domain> passedDomain) // deep copy contructor
+Domain(SmartPointer<viennals::Domain<NumericType, D>> passedLevelSet)
+Domain(std::vector<viennals::Domain<NumericType, D>> passedLevelSets)
+
+// Configure DomainSetup (v3.3.0) for basic geometry builders
+Domain(NumericType gridDelta, NumericType xExtent,
+       BoundaryType boundary = BoundaryType::REFLECTIVE_BOUNDARY) // 2D only
+Domain(NumericType gridDelta, NumericType xExtent, NumericType yExtent = 0.0,
+       BoundaryType boundary = BoundaryType::REFLECTIVE_BOUNDARY)
+Domain(const Setup &setup)
+

Member Functions

void setup(const Setup &setup) 
+void setup(NumericType gridDelta, NumericType xExtent, NumericType yExtent = 0,
+           BoundaryType boundary = BoundaryType::REFLECTIVE_BOUNDARY)
+void deepCopy(SmartPointer<Domain> passedDomain)
+void insertNextLevelSet(SmartPointer<viennals::Domain<NumericType, D>> passedLevelSet, 
+                        bool wrapLowerLevelSet = true)
+void insertNextLevelSetAsMaterial(SmartPointer<viennals::Domain<NumericType, D>> passedLevelSet, 
+                                  const Material material, bool wrapLowerLevelSet = true)
 void duplicateTopLevelSet(const Material material = Material::None)
 void removeTopLevelSet()
 void removeLevelSet(unsigned int idx, bool removeWrapped = true)
@@ -20,11 +30,15 @@
 auto &getMaterialMap() const
 auto &getCellSet() const
 auto &getGrid() const
+auto getGridDelta() const
+auto &getSetup()
 auto getBoundingBox() const
+auto getBoundaryConditions() const
 void print() const
 void saveLevelSetMesh(std::string name, int width = 1)
 void saveSurfaceMesh(std::string name, bool addMaterialIds = true)
-void saveVolumeMesh(std::string name)
+void saveVolumeMesh(std::string name, double wrappingLayerEpsilon = 1e-2)
+void saveHullMesh(std::string name, double wrappingLayerEpsilon = 1e-2)
 void saveLevelSets(std::string fileName) const
 void clear()
 

diff --git a/docs/_site/domain/index.html b/docs/_site/domain/index.html index be25b66d..8330177f 100644 --- a/docs/_site/domain/index.html +++ b/docs/_site/domain/index.html @@ -1,2 +1,2 @@ - Simulation Domain | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Simulation Domain

#include <psDomain.hpp>
+             Simulation Domain | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

Simulation Domain

#include <psDomain.hpp>
 

In our simulation framework, the essential hub for all geometry details is the Domain class. This class is like a smart keeper of information, holding everything about the materials in the simulation domain. It uses level sets to show surfaces and material interfaces with great detail and organizes data in a cell-based structure for the underlying volumes. Depending on the specific process, it can use one or both of these methods. This flexibility ensures that the simulation can handle different processes accurately and efficiently.


Table of contents


diff --git a/docs/_site/domain/material.html b/docs/_site/domain/material.html index 99605555..3a81cd36 100644 --- a/docs/_site/domain/material.html +++ b/docs/_site/domain/material.html @@ -1,3 +1,3 @@ - Material Mapping | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Material Mapping


If specified, each Level-Set in the Domain class is assigned a specific material, which can be used in a process to implement material-specific rates or similar. The following materials are currently available in the Material enum:

Material Numeric Value Description
None -1 Undefined Material
Mask 0 Mask Material
Si 1 Silicon
SiO2 2 Silicon Dioxide
Si3N4 3 Silicon Nitride
SiN 4 Silicon Nitride
SiON 5 Silicon Oxynitride
SiC 6 Silicon Carbide
SiGe 7 Silicon Germanium
PolySi 8 Polysilicon
GaN 9 Gallium Nitride
W 10 Tungsten
Al2O3 11 Aluminum Oxide
HfO2 12 Hafnium Oxide
TiN 13 Titanium Nitride
Cu 14 Copper
Polymer 15 Polymer
Dielectric 16 Dielectric Material
Metal 17 Metal
Air 18 Air
GAS 19 Gas

Example:

C++

auto material = Material::Si;
+             Material Mapping | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

Material Mapping


If specified, each Level-Set in the Domain class is assigned a specific material, which can be used in a process to implement material-specific rates or similar. The following materials are currently available in the Material enum:

Material Numeric Value Description
None -1 Undefined Material
Mask 0 Mask Material
Si 1 Silicon
SiO2 2 Silicon Dioxide
Si3N4 3 Silicon Nitride
SiN 4 Silicon Nitride
SiON 5 Silicon Oxynitride
SiC 6 Silicon Carbide
SiGe 7 Silicon Germanium
PolySi 8 Polysilicon
GaN 9 Gallium Nitride
W 10 Tungsten
Al2O3 11 Aluminum Oxide
HfO2 12 Hafnium Oxide
TiN 13 Titanium Nitride
Cu 14 Copper
Polymer 15 Polymer
Dielectric 16 Dielectric Material
Metal 17 Metal
Air 18 Air
GAS 19 Gas

Example:

C++

auto material = Material::Si;
 

Python

material = vps.Material.Si;
 

diff --git a/docs/_site/domain/surface.html b/docs/_site/domain/surface.html index 5fff6cf0..1eda21bd 100644 --- a/docs/_site/domain/surface.html +++ b/docs/_site/domain/surface.html @@ -1 +1 @@ - Surface and Material Interfaces | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Surface and Material Interfaces


The surface, as well as the material interfaces, are described implicitly by a level set (LS) function $\phi(\vec{x})$ which is defined at every point $\vec{x}$ in space. This function is obtained using signed distance transforms, describing the surface $S$ as the zero LS:

\[S = \{\vec{x}\!: \, \phi(\vec{x}) = 0 \}.\]

If the domain contains multiple LSs, the top LS wraps the entire structure and therefore represents the surface, while all other LS functions just describe material interfaces. Formally, the different material regions can be described by ${M}$ LS functions satisfying

\[\Phi_k(\vec{x}) \leq 0 \quad \Leftrightarrow \quad \vec{x} \in \bigcup_{i=1}^k \mathcal{M}_i.\]

Here $\Phi_M$ describes the entire structure $\mathcal{M}$, and the other LS functions correspond to material interfaces.

When inserting a new LS into the domain, an automatic wrapping process ensues. This process involves enveloping all existing Level-Sets through a Boolean operation, specifically a union with the topmost LS. It’s worth noting, though, that this default behavior is not obligatory. In instances where a specialized domain structure is desired, users have the option to circumvent this automatic wrapping mechanism.



+ Surface and Material Interfaces | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Surface and Material Interfaces


The surface, as well as the material interfaces, are described implicitly by a level set (LS) function $\phi(\vec{x})$ which is defined at every point $\vec{x}$ in space. This function is obtained using signed distance transforms, describing the surface $S$ as the zero LS:

\[S = \{\vec{x}\!: \, \phi(\vec{x}) = 0 \}.\]

If the domain contains multiple LSs, the top LS wraps the entire structure and therefore represents the surface, while all other LS functions just describe material interfaces. Formally, the different material regions can be described by ${M}$ LS functions satisfying

\[\Phi_k(\vec{x}) \leq 0 \quad \Leftrightarrow \quad \vec{x} \in \bigcup_{i=1}^k \mathcal{M}_i.\]

Here $\Phi_M$ describes the entire structure $\mathcal{M}$, and the other LS functions correspond to material interfaces.

When inserting a new LS into the domain, an automatic wrapping process ensues. This process involves enveloping all existing Level-Sets through a Boolean operation, specifically a union with the topmost LS. It’s worth noting, though, that this default behavior is not obligatory. In instances where a specialized domain structure is desired, users have the option to circumvent this automatic wrapping mechanism.



diff --git a/docs/_site/domain/volume.html b/docs/_site/domain/volume.html index a803a898..12cace11 100644 --- a/docs/_site/domain/volume.html +++ b/docs/_site/domain/volume.html @@ -1,4 +1,4 @@ - Volume | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Volume


A Cell-Set (CS) is used to store and track volume information in the domain. The CS is stored over the whole simulation domain, above and/or below the surface described by the Level-Set. It uses the same grid as the Level-Set, such that each Level-Set grid point acts as the corner of the cells around the point. To determine which material region a cell lies in, the LS values at the cell corner of the material interface are inspected. If the sum of the values is negative the cell belongs to the underlying material, otherwise it represents the material on the other side of the interface.

To find a cell in which an arbitrary point in space resides, a bounding volume hierarchy (BVH) is built on top of the CS. This allows for fast access to random cells in the CS. Additionally, cell-neighbor relations are established when setting up the CS. This allows for quick access to neighbor cells.

How to use the Cell-Set

To generate the CS from your domain, use the function:

auto domain = SmartPointer<Domain<NumericType, D>>::New()
+             Volume | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

Volume


A Cell-Set (CS) is used to store and track volume information in the domain. The CS is stored over the whole simulation domain, above and/or below the surface described by the Level-Set. It uses the same grid as the Level-Set, such that each Level-Set grid point acts as the corner of the cells around the point. To determine which material region a cell lies in, the LS values at the cell corner of the material interface are inspected. If the sum of the values is negative the cell belongs to the underlying material, otherwise it represents the material on the other side of the interface.

To find a cell in which an arbitrary point in space resides, a bounding volume hierarchy (BVH) is built on top of the CS. This allows for fast access to random cells in the CS. Additionally, cell-neighbor relations are established when setting up the CS. This allows for quick access to neighbor cells.

How to use the Cell-Set

To generate the CS from your domain, use the function:

auto domain = SmartPointer<Domain<NumericType, D>>::New()
 ...
 // Add level-sets to domain
 ...
diff --git a/docs/_site/examples/index.html b/docs/_site/examples/index.html
index 9ea0a32a..234ec3b1 100644
--- a/docs/_site/examples/index.html
+++ b/docs/_site/examples/index.html
@@ -1,4 +1,4 @@
-             Examples | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

Examples


Building

The examples can be built using CMake:

git clone https://github.com/ViennaTools/ViennaPS.git
+             Examples | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

Examples


Building

The examples can be built using CMake:

git clone https://github.com/ViennaTools/ViennaPS.git
 cd ViennaPS
 
 cmake -B build -DVIENNAPS_BUILD_EXAMPLES=ON
diff --git a/docs/_site/general/index.html b/docs/_site/general/index.html
index 2cb33d40..cc82874b 100644
--- a/docs/_site/general/index.html
+++ b/docs/_site/general/index.html
@@ -1,4 +1,4 @@
-             General Notes | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

General Notes


Namespace

ViennaPS is encapsulated within the viennaps namespace. This design choice ensures that all classes, functions, and utilities within the library are organized under a single namespace, providing a clean and structured interface for users. When working with ViennaPS, it is essential to include the viennaps namespace in your code to access the library’s functionality. In this documentation, the namespace is omitted for brevity, but it should be included in your code.

Numeric Types

ViennaPS supports the utilization of either float or double as the underlying numeric type. While float might offer slightly higher performance in some cases, it is generally recommended to use double in your simulation due to its enhanced precision.

It’s essential to note that the choice of numeric type is a static (compile-time) parameter in every ViennaPS class and function. Once a numeric type is selected for a particular simulation, it is not possible to switch to a different numeric type within the program.

Additionally, for users working with Python bindings, it’s important to be aware that the Python interface always uses double as the numeric type.

Switching between 2D and 3D mode

ViennaPS provides the flexibility for users to choose between 2D and 3D modes during compile time. The dimensionality is specified as a second template (static) parameter, and most classes and functions in ViennaPS adhere to this structure. It’s important to note that 2D and 3D classes cannot be mixed within the same simulation, and the choice of dimensionality is fixed at compile time.

For users who need to transition from a 2D to a 3D simulation, ViennaPS offers the Extrude utility. This utility enables the extrusion of a 2D domain to 3D, providing a seamless way to extend simulations across different dimensions.

Using Smart Pointers

In ViennaPS, smart pointers are utilized to pass domains, models, and other essential objects to processes and utility functions. To facilitate this, the library includes a custom class named SmartPointer, serving as a shared pointer implementation. This design choice ensures efficient memory management and enables seamless interaction between different components within the simulation framework.

Example:

// Creating a new domain
+             General Notes | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

General Notes


Namespace

ViennaPS is encapsulated within the viennaps namespace. This design choice ensures that all classes, functions, and utilities within the library are organized under a single namespace, providing a clean and structured interface for users. When working with ViennaPS, it is essential to include the viennaps namespace in your code to access the library’s functionality. In this documentation, the namespace is omitted for brevity, but it should be included in your code.

Numeric Types

ViennaPS supports the utilization of either float or double as the underlying numeric type. While float might offer slightly higher performance in some cases, it is generally recommended to use double in your simulation due to its enhanced precision.

It’s essential to note that the choice of numeric type is a static (compile-time) parameter in every ViennaPS class and function. Once a numeric type is selected for a particular simulation, it is not possible to switch to a different numeric type within the program.

Additionally, for users working with Python bindings, it’s important to be aware that the Python interface always uses double as the numeric type.

Switching between 2D and 3D mode

ViennaPS provides the flexibility for users to choose between 2D and 3D modes during compile time. The dimensionality is specified as a second template (static) parameter, and most classes and functions in ViennaPS adhere to this structure. It’s important to note that 2D and 3D classes cannot be mixed within the same simulation, and the choice of dimensionality is fixed at compile time.

For users who need to transition from a 2D to a 3D simulation, ViennaPS offers the Extrude utility. This utility enables the extrusion of a 2D domain to 3D, providing a seamless way to extend simulations across different dimensions.

Using Smart Pointers

In ViennaPS, smart pointers are utilized to pass domains, models, and other essential objects to processes and utility functions. To facilitate this, the library includes a custom class named SmartPointer, serving as a shared pointer implementation. This design choice ensures efficient memory management and enables seamless interaction between different components within the simulation framework.

Example:

// Creating a new domain
 auto domain = psSmartPointer<psDomain<NumericType, D>>::New();
 
 // Using a pre-built model
diff --git a/docs/_site/geo/basic/fin.html b/docs/_site/geo/basic/fin.html
index e5c5c1a2..95fb56c4 100644
--- a/docs/_site/geo/basic/fin.html
+++ b/docs/_site/geo/basic/fin.html
@@ -1,5 +1,17 @@
-             Fin Geometry | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

Fin Geometry

#include <psMakeFin.hpp>
+             Fin Geometry | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

Fin Geometry

#include <geometries/psMakeFin.hpp>
 

The MakeFin class generates a fin geometry extending in the z (3D) or y (2D) direction, centered at the origin with specified dimensions in the x and y directions. The fin may incorporate periodic boundaries in the x and y directions (limited to 3D). Users can define the width and height of the fin, and it can function as a mask, with the specified material exclusively applied to the bottom of the fin, while the upper portion adopts the mask material.

// namespace viennaps
+
+// with DomainSetup configured (v3.3.0)
+MakeFin(DomainType domain,
+        NumericType finWidth,
+        NumericType finHeight,
+        NumericType finTaperAngle,
+        NumericType maskHeight = 0.,
+        NumericType maskTaperAngle = 0.,
+        bool halfFin = false,
+        Material material = Material::Si,
+        Material maskMaterial = Material::Mask)
+
 MakeFin(DomainType domain,
         const NumericType gridDelta,
         const NumericType xExtent, 
@@ -9,13 +21,32 @@
         const NumericType baseHeight = 0.,
         const bool periodicBoundary = false,
         const bool makeMask = false,
-        const Material material = Material::None)
-
Parameter Description Type
domain Specifies the type of domain for the fin geometry. SmartPointer<Domain<NumericType, D>
gridDelta Represents the grid spacing or resolution used in the simulation. NumericType
xExtent Defines the extent of the fin geometry in the x-direction. NumericType
yExtent Specifies the extent of the fin geometry in the y-direction. NumericType
finWidth Sets the width of the fin. NumericType
finHeight Determines the height of the fin. NumericType
baseHeight (Optional) Sets the base height of the fin. Default is set to 0. NumericType
periodicBoundary (Optional) If set to true, enables periodic boundaries in both x and y directions. Default is set to false. bool
makeMask (Optional) If set to true, allows the fin to function as a mask, with specified material applied only to the bottom. Default is set to false. bool
material (Optional) Specifies the material used for the fin. Default is set to Material::None. Material

Example usage:

C++

// namespace viennaps
+        const Material material = Material::Si)
+
Parameter Type Description Applicable Constructor
domain psDomainType The simulation domain. Both
finWidth NumericType Width of the fin. Both
finHeight NumericType Height of the fin. Both (ignored if makeMask = true)
finTaperAngle NumericType Taper angle of the fin (default: 0.). Both (ignored if makeMask = true)
maskHeight NumericType Height of the mask (default: 0.). First constructor only
maskTaperAngle NumericType Taper angle of the mask (default: 0.). First constructor only
halfFin bool If true, the fin is halved along the x-axis. First constructor only
material Material Material of the fin (default: Material::Si). Both
maskMaterial Material Material of the mask (default: Material::Mask). First constructor only
gridDelta NumericType Grid spacing in the simulation domain. Second constructor only
xExtent NumericType Extent of the domain in the x-direction. Second constructor only
yExtent NumericType Extent of the domain in the y-direction. Second constructor only
taperAngle NumericType Taper angle of the fin/mask. Second constructor only
baseHeight NumericType Base height of the fin (default: 0.). Second constructor only
periodicBoundary bool If true, enables periodic boundary conditions (default: false). Second constructor only
makeMask bool If true, a mask is created instead of a fin (default: false). Second constructor only

Note:

  • The first constructor requires that the domain is already configured and is only available from ViennaPS v3.3.0.
  • The second constructor allows domain setup within the constructor by specifying gridDelta, xExtent, and yExtent.

Example usage:

C++

// namespace viennaps
+// recomended with DomainSetup configured (v3.3.0)
+auto domain = SmartPointer<Domain<NumericType, D>>::New(0.5, 10., 10., BoundaryType::REFLECTIVE_BOUNDARY);
+MakeFin(domain, 2.5, 5.0, 10., 0., 0., false, Material::Si, Material::Mask).apply();
+
+// without DomainSetup
 auto domain = SmartPointer<Domain<NumericType, D>>::New();
 MakeFin<NumericType, D>(domain, 0.5, 10.0, 10.0, 5.0, 5.0, 0., false, false,
                         Material::Si)
     .apply();
-

Python:

domain = vps.Domain()
+

Python:

# with DomainSetup configured (v3.3.0)
+domain = vps.Domain(0.5, 10., 10., vps.BoundaryType.REFLECTIVE_BOUNDARY)
+vps.MakeFin(domain=domain,
+            finWidth=2.5,
+            finHeight=5.0,
+            finTaperAngle=10.,
+            maskHeight=5.,
+            maskTaperAngle=0.,
+            halfFin=False,
+            material=vps.Material.Si,
+            maskMaterial=vps.Material.Mask
+           ).apply()
+
+# without DomainSetup
+domain = vps.Domain()
 vps.MakeFin(domain=domain,
             gridDelta=0.5,
             xExtent=10.0,
diff --git a/docs/_site/geo/basic/hole.html b/docs/_site/geo/basic/hole.html
index 28025df8..ef0f96c8 100644
--- a/docs/_site/geo/basic/hole.html
+++ b/docs/_site/geo/basic/hole.html
@@ -1,5 +1,17 @@
-             Hole Geometry | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

Hole Geometry

#include <psMakeHole.hpp> 
+             Hole Geometry | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

Hole Geometry

#include <geometries/psMakeHole.hpp> 
 

The MakeHole class generates a hole geometry in the z direction, which, in 2D mode, corresponds to a trench geometry. Positioned at the origin, the hole is centered, with the total extent defined in the x and y directions. The normal direction for the hole creation is in the positive z direction in 3D and the positive y direction in 2D. Users can specify the hole’s radius, depth, and opt for tapering with a designated angle. The hole configuration may include periodic boundaries in both the x and y directions. Additionally, the hole can serve as a mask, with the specified material only applied to the bottom of the hole, while the remainder adopts the mask material.

// namespace viennaps
+
+// with DomainSetup configured (v3.3.0)
+MakeHole(psDomainType domain, 
+         NumericType holeRadius, 
+         NumericType holeDepth,
+         NumericType holeTaperAngle = 0., 
+         NumericType maskHeight = 0.,
+         NumericType maskTaperAngle = 0., 
+         HoleShape shape = HoleShape::Full,
+         Material material = Material::Si,
+         Material maskMaterial = Material::Mask)
+
 MakeHole(DomainType domain,
          NumericType gridDelta,
          NumericType xExtent, 
@@ -10,14 +22,37 @@
          NumericType baseHeight = 0.,
          bool periodicBoundary = false,
          bool makeMask = false,
-         Material material = Material::None,
+         Material material = Material::Si,
          HoleShape holeShape = HoleShape::Full)
-
Parameter Description Type
domain Specifies the type of domain for the hole geometry. SmartPointer<Domain<NumericType, D>>
gridDelta Represents the grid spacing or resolution used in the simulation. NumericType
xExtent Defines the extent of the hole geometry in the x-direction. NumericType
yExtent Specifies the extent of the hole geometry in the y-direction. NumericType
holeRadius Sets the radius of the hole. NumericType
holeDepth Determines the depth of the hole. NumericType
taperAngle (Optional) Specifies the angle of tapering for the hole geometry in degrees. Default is set to 0. NumericType
baseHeight (Optional) Sets the base height of the hole. Default is set to 0. NumericType
periodicBoundary (Optional) If set to true, enables periodic boundaries in both x and y directions. Default is set to false. bool
makeMask (Optional) If set to true, allows the hole to function as a mask, with specified material applied only to the bottom. Default is set to false. bool
material (Optional) Specifies the material used for the hole. Default is set to Material::None. Material
holeShape (Optional) Specifies whether a full, half or quarter hole should be created. Half and quarter holes with reflective boundary conditions can simulate the full dynamics of a hole with less computational cost. Default is set to HoleShape::Full. HoleShape

Example usage:

C++

// namespace viennaps
+
Parameter Type Description Applicable Constructor
domain psDomainType The simulation domain. Both
holeRadius NumericType Radius of the hole. Both
holeDepth NumericType Depth of the hole. Both
holeTaperAngle NumericType Taper angle of the hole (default: 0.). Both
maskHeight NumericType Height of the masking layer (default: 0.). First constructor only
maskTaperAngle NumericType Taper angle of the masking layer (default: 0.). First constructor only
shape HoleShape Shape of the hole (default: HoleShape::Full). Both
material Material Material of the hole (default: Material::Si). Both
maskMaterial Material Material of the mask (default: Material::Mask). First constructor only
gridDelta NumericType Grid spacing in the simulation domain. Second constructor only
xExtent NumericType Extent of the domain in the x-direction. Second constructor only
yExtent NumericType Extent of the domain in the y-direction. Second constructor only
taperAngle NumericType Alternative name for holeTaperAngle in the second constructor (default: 0.). Second constructor only
baseHeight NumericType Height at which the hole starts (default: 0.). Second constructor only
periodicBoundary bool If true, enables periodic boundary conditions (default: false). Second constructor only
makeMask bool If true, the mask is created instead of the hole, setting holeDepth to 0 (default: false). Second constructor only

Note:

  • The first constructor requires that the domain is already configured.
  • The second constructor sets up a new simulation domain with gridDelta, xExtent, and yExtent.
  • If makeMask is true, the hole is not created, and only the masking layer is applied.

Example usage:

C++

// namespace viennaps
+
+// with DomainSetup configured (v3.3.0)
+auto domain = SmartPointer<Domain<NumericType, D>>::New(0.5, 10., 10., BoundaryType::REFLECTIVE_BOUNDARY);
+MakeHole<NumericType, D>(domain, 5.0, 5.0, 10., 0., 0., HoleShape::Quarter, Material::Si, Material::Mask)
+    .apply();
+
+// without DomainSetup
 auto domain = SmartPointer<Domain<NumericType, D>>::New();
 MakeHole<NumericType, D>(domain, 0.5, 10.0, 10.0, 2.5, 5.0, 10., 0., false,
                          false, Material::Si)
     .apply();
-

Python

domain = vps.Domain()
+

Python

# with DomainSetup configured (v3.3.0)
+domain = vps.Domain(gridDelta=0.5, 
+                    xExtent=10.0, 
+                    yExtent=10.0, 
+                    boundaryType=vps.BoundaryType.REFLECTIVE_BOUNDARY)
+vps.MakeHole(domain=domain,
+             holeRadius=5.0,
+             holeDepth=0.0,
+             holeTaperAngle=0.0,
+             maskHeight=5.0,
+             maskTaperAngle=2.0,
+             shape=vps.HoleShape.Quarter,
+             material=vps.Material.Si,
+             maskMaterial=vps.Material.Mask
+            ).apply()
+
+domain = vps.Domain()
 vps.MakeHole(domain=domain,
               gridDelta=0.5,
               xExtent=10.0,
diff --git a/docs/_site/geo/basic/index.html b/docs/_site/geo/basic/index.html
index 94ae5870..77e3fc8a 100644
--- a/docs/_site/geo/basic/index.html
+++ b/docs/_site/geo/basic/index.html
@@ -1 +1 @@
-             Basic Geometries | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

Basic Geometries


ViennaPS provides a set of functions to effortlessly create basic geometries, facilitating quick testing of models or serving as the groundwork for your process simulation configuration. The various available geometries are outlined below:


Table of contents


+ Geometry Builders | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Basic Geometry Builders


ViennaPS provides a set of functions to effortlessly create basic geometries, facilitating quick testing of models or serving as the groundwork for your process simulation configuration. The various available geometries are outlined below:


Table of contents


diff --git a/docs/_site/geo/basic/plane.html b/docs/_site/geo/basic/plane.html index 9c6a22e5..8c758a86 100644 --- a/docs/_site/geo/basic/plane.html +++ b/docs/_site/geo/basic/plane.html @@ -1,35 +1,30 @@ - Plane Geometry | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Plane Geometry

#include <psMakePlane.hpp>
+             Plane Geometry | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

Plane Geometry

#include <geometries/psMakePlane.hpp>
 

The MakePlane class offers a straightforward approach to generate a plane as a level-set within your domain. This utility is useful for crafting substrates with any material. You have the flexibility to append the plane to an existing geometry or create a new one. In 3D, the plane is generated with a normal direction in the positive z direction, while in 2D, it is oriented in the positive y direction. The plane is centered around the origin, with the total specified extent and height. Additionally, you can opt for a periodic boundary in the x and y directions.

// namespace viennaps
-// New geometry
-MakePlane(DomainType domain, 
-         const NumericType gridDelta,
-         const NumericType xExtent, 
-         const NumericType yExtent,
-         const NumericType height, 
-         const bool periodicBoundary = false,
-         const Material material = Material::None)
+MakePlane(psDomainType domain, 
+          NumericType baseHeight = 0.,
+          Material material = Material::Si, 
+          bool addToExisting = false)
 
-// Add to existing geometry
-MakePlane(DomainType domain, NumericType height = 0.,
-          const Material material = Material::None)
-

Depending on the specific constructor invoked for the plane-builder, the behavior varies: the domain may be cleared, and a new plane inserted, or the plane can be added to the existing geometry in the domain. A detailed description of the parameters follows:

Parameter Description Type
domain The Domain object passed in a smart pointer. SmartPointer<Domain<NumericType, D>>
gridDelta Represents the grid spacing or resolution used in the simulation. NumericType
xExtent Defines the extent of the plane geometry in the x-direction. NumericType
yExtent Defines the extent of the plane geometry in the y-direction. NumericType
height Sets the position of the plane in y(2D)/z(3D) direction. NumericType
periodicBoundary (Optional) If set to true, enables periodic boundaries in both x and y directions. Default is set to false. bool
material (Optional) Specifies the material used for the plane. Default is set to Material::None. Material

Example usage:

  • Creating a new domain:

C++

// namespace viennaps
-auto domain = SmartPointer<Domain<NumericType, D>>::New();
-MakePlane<NumericType, D>(domain, 0.5, 10.0, 10.0, 0.0, false,
-                          Material::Si).apply();
-

Python

domain = vps.Domain()
+MakePlane(psDomainType domain, 
+          NumericType gridDelta, 
+          NumericType xExtent,
+          NumericType yExtent, 
+          NumericType baseHeight,
+          bool periodicBoundary = false, 
+          Material material = Material::Si)
+      
+

Depending on the specific constructor invoked for the plane-builder, the behavior varies: the domain may be cleared, and a new plane inserted, or the plane can be added to the existing geometry in the domain. A detailed description of the parameters follows:

Parameter Type Description Applicable Constructor
domain psDomainType The simulation domain. Both
baseHeight NumericType Height at which the plane is placed (default: 0.). Both
material Material Material of the plane (default: Material::Si). Both
addToExisting bool If true, the plane is added to an existing geometry instead of creating a new one (default: false). First constructor only
gridDelta NumericType Grid spacing in the simulation domain. Second constructor only
xExtent NumericType Extent of the domain in the x-direction. Second constructor only
yExtent NumericType Extent of the domain in the y-direction. Second constructor only
periodicBoundary bool If true, enables periodic boundary conditions (default: false). Second constructor only

Note:

  • The first constructor requires that the domain is already configured and allows adding a plane to an existing geometry.
  • The second constructor creates a new geometry and sets up the domain using gridDelta, xExtent, and yExtent.

Example usage:

  • Creating a new domain:

C++

// namespace viennaps
+auto domain = SmartPointer<Domain<NumericType, D>>::New(0.5, 10., 10., BoundaryType::REFLECTIVE_BOUNDARY);
+MakePlane<NumericType, D>(domain, 0.0, Material::Si).apply();
+

Python

domain = vps.Domain(gridDelta=0.5, xExtent=10.0, yExtent=10.0, boundaryType=vps.BoundaryType.REFLECTIVE_BOUNDARY)
 vps.MakePlane(domain=domain,
-              gridDelta=0.5,
-              xExtent=10.0,
-              yExtent=10.0,
-              height=0.0,
-              periodicBoundary=False,
+              baseHeight=0.0,
               material=vps.Material.Si,
              ).apply()
-
  • Adding plane to existing domain

C++

auto domain = SmartPointer<Domain<NumericType, D>>::New();
-psMakePlane<NumericType, D>(domain, 10.0, Material::Si).apply();
-

Python

domain = vps.Domain()
-vps.MakePlane(domain=domain,
+
  • Adding plane to existing domain

C++

MakePlane<NumericType, D>(domain, 10.0, Material::Si, true).apply();
+

Python

vps.MakePlane(domain=domain,
               height=0.0,
               material=vps.Material.Si,
+              addToExisting=True
              ).apply()
 

diff --git a/docs/_site/geo/basic/stack.html b/docs/_site/geo/basic/stack.html index 5262d551..268b5735 100644 --- a/docs/_site/geo/basic/stack.html +++ b/docs/_site/geo/basic/stack.html @@ -1,16 +1,28 @@ - Stack Geometry | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Stack Geometry

#include <psMakeStack.hpp>
+             Stack Geometry | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

Stack Geometry

#include <geometries/psMakeStack.hpp>
 

The MakeStack generates a stack of alternating SiO2/Si3N4 layers featuring an optionally etched hole (3D) or trench (2D) at the center. The stack emerges in the positive z direction (3D) or y direction (2D) and is centered around the origin, with its x/y extent specified. Users have the flexibility to introduce periodic boundaries in the x and y directions. Additionally, the stack can incorporate a top mask with a central hole of a specified radius or a trench with a designated width. This versatile functionality enables users to create diverse and customized structures for simulation scenarios.

// namespace viennaps
+// with DomainSetup configured (v3.3.0)
+MakeStack(psDomainType domain, 
+          int numLayers, 
+          NumericType layerHeight,
+          NumericType substrateHeight, 
+          NumericType holeRadius,
+          NumericType trenchWidth, 
+          NumericType maskHeight,
+          NumericType taperAngle, 
+          bool halfStack = false,
+          Material maskMaterial = Material::Mask)
+
 MakeStack(DomainType domain, 
-          const NumericType gridDelta,
-          const NumericType xExtent, 
-          const NumericType yExtent,
-          const int numLayers, 
-          const NumericType layerHeight,
-          const NumericType substrateHeight,
-          const NumericType holeRadius,
-          const NumericType trenchWidth,
-          const NumericType maskHeight, 
-          const bool periodicBoundary = false)
+          NumericType gridDelta,
+          NumericType xExtent, 
+          NumericType yExtent,
+          int numLayers, 
+          NumericType layerHeight,
+          NumericType substrateHeight,
+          NumericType holeRadius,
+          NumericType trenchWidth,
+          NumericType maskHeight, 
+          bool periodicBoundary = false)
 
Parameter Description Type
domain Specifies the domain type for the stack geometry. SmartPointer<Domain<NumericType, D>>
gridDelta Represents the grid spacing or resolution used in the simulation. NumericType
xExtent Defines the extent of the stack geometry in the x-direction. NumericType
yExtent Specifies the extent of the stack geometry in the y-direction. NumericType
numLayers Sets the number of layers in the stack. int
layerHeight Determines the height of each layer in the stack. NumericType
substrateHeight Specifies the height of the substrate. NumericType
holeRadius Sets the radius of the hole. NumericType
trenchWidth Determines the width of the trench. NumericType
maskHeight Specifies the height of the mask. NumericType
periodicBoundary (Optional) If set to true, enables periodic boundaries. Default is set to false. bool

trenchWidth and holeRadius can only be used mutually exclusive. I.e., if one is set, the other has to be set to 0.

Example usage:

C++

// namespace viennaps
 auto domain = SmartPointer<Domain<NumericType, D>>::New();
 MakeStack<NumericType, D>(domain, 0.5, 10.0, 10.0, 5, 5.0, 10., 0.0, 5.0,
diff --git a/docs/_site/geo/basic/trench.html b/docs/_site/geo/basic/trench.html
index 5713b84f..05c99ae4 100644
--- a/docs/_site/geo/basic/trench.html
+++ b/docs/_site/geo/basic/trench.html
@@ -1,16 +1,28 @@
-             Trench Geometry | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

Trench Geometry

#include <psMakeTrench.hpp> 
+             Trench Geometry | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

Trench Geometry

#include <geometries/psMakeTrench.hpp> 
 

The MakeTrench class is used to generate a new trench geometry extending in the z (3D) or y (2D) direction, centrally positioned at the origin with the total extent specified in the x and y directions. The trench configuration may include periodic boundaries in both the x and y directions. Users have the flexibility to define the trench’s width, depth, and incorporate tapering with a designated angle. Moreover, the trench can serve as a mask, applying the specified material exclusively to the bottom while the remaining portion adopts the mask material.

// namespace viennaps
+// with DomainSetup configured (v3.3.0)
+MakeTrench(psDomainType domain, 
+           NumericType trenchWidth,
+           NumericType trenchDepth, 
+           NumericType trenchTaperAngle = 0,
+           NumericType maskHeight = 0, 
+           NumericType maskTaperAngle = 0,
+           bool halfTrench = false, 
+           Material material = Material::Si,
+           Material maskMaterial = Material::Mask)
+
+
 MakeTrench(DomainType domain, 
-           const NumericType gridDelta,
-           const NumericType xExtent, 
-           const NumericType yExtent,
-           const NumericType trenchWidth,
-           const NumericType trenchDepth,
-           const NumericType taperingAngle = 0., // in degrees
-           const NumericType baseHeight = 0.,
-           const bool periodicBoundary = false,
-           const bool makeMask = false,
-           const Material material = Material::None)
+           NumericType gridDelta,
+           NumericType xExtent, 
+           NumericType yExtent,
+           NumericType trenchWidth,
+           NumericType trenchDepth,
+           NumericType taperingAngle = 0., // in degrees
+           NumericType baseHeight = 0.,
+           bool periodicBoundary = false,
+           bool makeMask = false,
+           Material material = Material::Si)
 
Parameter Description Type
domain Specifies the type of domain for the trench geometry. SmartPointer<Domain<NumericType, D>>
gridDelta Represents the grid spacing or resolution used in the simulation. NumericType
xExtent Defines the extent of the trench geometry in the x-direction. NumericType
yExtent Specifies the extent of the trench geometry in the y-direction. NumericType
trenchWidth Sets the width of the trench. NumericType
trenchDepth Determines the depth of the trench. NumericType
taperingAngle (Optional) Specifies the angle of tapering for the trench geometry in degrees. Default is set to 0. NumericType
baseHeight (Optional) Sets the base height of the trench. Default is set to 0. NumericType
periodicBoundary (Optional) If set to true, enables periodic boundaries in both x and y directions (only applicable in 3D). Default is set to false. bool
makeMask (Optional) If set to true, allows the trench to function as a mask, with specified material applied only to the bottom. Default is set to false. bool
material (Optional) Specifies the material used for the trench. Default is set to Material_None. Material

Example usage:

C++

// namespace viennaps
 auto domain = SmartPointer<Domain<NumericType, D>>::New();
 MakeTrench<NumericType, D>(domain, 0.5, 10.0, 10.0, 5.0, 5.0, 10., 0.,
diff --git a/docs/_site/geo/custom.html b/docs/_site/geo/custom.html
index 37ad5dfa..91d42918 100644
--- a/docs/_site/geo/custom.html
+++ b/docs/_site/geo/custom.html
@@ -1 +1 @@
-             Custom Geometry | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

Custom Geometry using ViennaLS


ViennaPS offers the capability to create custom geometries using tools from the ViennaLS library. The viennals::MakeGeometry function provides functionality for constructing basic geometric shapes like boxes, spheres, or cylinders. Moreover, shapes can be formed by creating a convex hull over a point cloud or by explicitly defining points and elements of a structure. Subsequently, boolean operations such as union, intersect, and relative complement can be applied to merge these basic shapes into a customized geometry. This flexible approach enables users to create complex geometries tailored to their specific simulation requirements. Some examples are provided below:

Examples:

Coming soon


+ Custom Geometry | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Custom Geometry using ViennaLS


ViennaPS offers the capability to create custom geometries using tools from the ViennaLS library. The viennals::MakeGeometry function provides functionality for constructing basic geometric shapes like boxes, spheres, or cylinders. Moreover, shapes can be formed by creating a convex hull over a point cloud or by explicitly defining points and elements of a structure. Subsequently, boolean operations such as union, intersect, and relative complement can be applied to merge these basic shapes into a customized geometry. This flexible approach enables users to create complex geometries tailored to their specific simulation requirements.


diff --git a/docs/_site/geo/gdsimport.html b/docs/_site/geo/gdsimport.html index 57c21aae..a13cd0dd 100644 --- a/docs/_site/geo/gdsimport.html +++ b/docs/_site/geo/gdsimport.html @@ -1,4 +1,4 @@ - GDS File Import | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

Importing a GDSII Mask File


ViennaPS provides a convenient feature allowing users to import geometries directly from GDSII mask files. It’s important to note that ViennaPS focuses on handling simple geometry information extracted from GDSII files, without supporting additional data that might be stored within the GDSII format.

To parse a GDSII file using ViennaPS, follow these steps:

  1. Create a ps::GDSGeometry Object: Initialize a ps::GDSGeometry object, specifying the desired grid spacing, boundary conditions, and additional padding (optional).

     auto mask = ps::SmartPointer<ps::GDSGeometry<NumericType, D>>::New();
    +             GDS File Import | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

    Importing a GDSII Mask File


    ViennaPS provides a convenient feature allowing users to import geometries directly from GDSII mask files. It’s important to note that ViennaPS focuses on handling simple geometry information extracted from GDSII files, without supporting additional data that might be stored within the GDSII format.

    To parse a GDSII file using ViennaPS, follow these steps:

    1. Create a ps::GDSGeometry Object: Initialize a ps::GDSGeometry object, specifying the desired grid spacing, boundary conditions, and additional padding (optional).

       auto mask = ps::SmartPointer<ps::GDSGeometry<NumericType, D>>::New();
        mask->setGridDelta(gridDelta);
        mask->setBoundaryConditions(boundaryConds);
        mask->setBoundaryPadding(xPad, yPad);
      diff --git a/docs/_site/geo/index.html b/docs/_site/geo/index.html
      index 034d5be2..6df8ab9c 100644
      --- a/docs/_site/geo/index.html
      +++ b/docs/_site/geo/index.html
      @@ -1 +1 @@
      -             Creating a Geometry | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Creating a Geometry


      Create intricate geometries using the versatile tools offered by ViennaLS or generate a basic geometry using of the provided geometry builders. Alternatively, you can import a geometry from a GDSII mask file.


      Table of contents


      + Creating a Geometry | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

      Creating a Geometry


      Create custom geometries using the versatile tools offered by ViennaLS or generate a basic geometry (plane, hole, trench, fin, stack) using one of the provided geometry builders. Alternatively, you can import a geometry from a GDSII mask file.


      Table of contents


      diff --git a/docs/_site/index.html b/docs/_site/index.html index 6a73b244..3bfe1845 100644 --- a/docs/_site/index.html +++ b/docs/_site/index.html @@ -1,3 +1,3 @@ - Home | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

      ViennaPS

      Process Simulation Library

      Get started now View it on GitHub


      ViennaPS is a header-only C++ process simulation library, which includes surface and volume representations, a ray tracer, and physical models for the simulation of microelectronic fabrication processes. This library seamlessly integrates advanced level-set functionalities with top-down Monte Carlo flux calculations, powered by state-of-the-art ray tracing techniques. This combination brings a new level of accuracy and efficiency to process simulations, empowering engineers and researchers to model complex systems.

      ViennaPS is under heavy development and improved daily. If you do have suggestions or find bugs, please let us know on GitHub or contact us directly at viennatools@iue.tuwien.ac.at!

      This documentation serves as your comprehensive guide to understanding, implementing, and harnessing the capabilities of our process simulation library. Whether you are a seasoned researcher seeking to refine your simulations or an engineer aiming to optimize real-world processes, this library provides a versatile and robust platform to meet your diverse needs.

      Throughout this documentation, you will find detailed explanations, practical examples, and best practices to effectively utilize the library. We aim to empower users with the knowledge and tools necessary to simulate a wide range of processes accurately and efficiently, making informed decisions and driving innovation in the field.

      Contributing

      If you want to contribute to ViennaPS, make sure to follow the LLVM Coding guidelines.

      Make sure to format all files before creating a pull request:

      cmake -B build
      +             Home | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      ViennaPS

      Process Simulation Library

      Get started now View it on GitHub


      ViennaPS is a header-only C++ process simulation library, which includes surface and volume representations, a ray tracer, and physical models for the simulation of microelectronic fabrication processes. This library seamlessly integrates advanced level-set functionalities with top-down Monte Carlo flux calculations, powered by state-of-the-art ray tracing techniques. This combination brings a new level of accuracy and efficiency to process simulations, empowering engineers and researchers to model complex systems.

      ViennaPS is under heavy development and improved daily. If you do have suggestions or find bugs, please let us know on GitHub or contact us directly at viennatools@iue.tuwien.ac.at!

      This documentation serves as your comprehensive guide to understanding, implementing, and harnessing the capabilities of our process simulation library. Whether you are a seasoned researcher seeking to refine your simulations or an engineer aiming to optimize real-world processes, this library provides a versatile and robust platform to meet your diverse needs.

      Throughout this documentation, you will find detailed explanations, practical examples, and best practices to effectively utilize the library. We aim to empower users with the knowledge and tools necessary to simulate a wide range of processes accurately and efficiently, making informed decisions and driving innovation in the field.

      Contributing

      If you want to contribute to ViennaPS, make sure to follow the LLVM Coding guidelines.

      Make sure to format all files before creating a pull request:

      cmake -B build
       cmake --build build --target format
       

      About the project

      ViennaPS was developed under the aegis of the Institute for Microelectronics at the TU Wien.

      Current contributors: Tobias Reiter, Noah Karnel, Julius Piso, Lado Filipovic

      Contact us via: viennatools@iue.tuwien.ac.at

      License

      See file LICENSE in the base directory.


      diff --git a/docs/_site/inst/index.html b/docs/_site/inst/index.html index 8f6d9cf4..c3108cc7 100644 --- a/docs/_site/inst/index.html +++ b/docs/_site/inst/index.html @@ -1,4 +1,4 @@ - Installing the Library | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

      Installing the Library


      Supported Operating Systems

      • Windows (Visual Studio)

      • Linux (g++ / clang)

      • macOS (XCode)

      System Requirements

      • C++17 Compiler with OpenMP support

      Installing

      ViennaLS uses VTK as dependency which can be installed beforehand to save some time when building the dependencies. On Linux based systems, it can be installed using the package manager: sudo apt install libvtk9.1 libvtk9-dev. On macOS, one can use Homebrew to install it: brew install vtk.

      ViennaRay uses Embree as dependency which can be installed beforehand to save some time when building the dependencies. On Linux based systems, it can be installed using the package manager: sudo apt install libembree-dev. If you are using an Ubuntu version older than 24, the installed package will be Embree version 3, and you must additionally pass VIENNARAY_EMBREE_VERSION=3 to the CMake options, e.g., cmake -B build -G Ninja -D VIENNARAY_EMBREE_VERSION=3 On macOS, you can install Embree using Homebrew with the command: brew install embree.

      The CMake configuration automatically checks if the dependencies are installed. If CMake is unable to find them, the dependencies will be built from source with the buildDependencies target. Notably, ViennaPS operates as a header-only library, eliminating the need for a formal installation process. Nonetheless, we advise following the outlined procedure to neatly organize and relocate all header files to a designated directory:

      git clone https://github.com/ViennaTools/ViennaPS.git
      +             Installing the Library | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Installing the Library


      Supported Operating Systems

      • Windows (Visual Studio)

      • Linux (g++ / clang)

      • macOS (XCode)

      System Requirements

      • C++17 Compiler with OpenMP support

      Installing

      ViennaLS uses VTK as dependency which can be installed beforehand to save some time when building the dependencies. On Linux based systems, it can be installed using the package manager: sudo apt install libvtk9.1 libvtk9-dev. On macOS, one can use Homebrew to install it: brew install vtk.

      ViennaRay uses Embree as dependency which can be installed beforehand to save some time when building the dependencies. On Linux based systems, it can be installed using the package manager: sudo apt install libembree-dev. If you are using an Ubuntu version older than 24, the installed package will be Embree version 3, and you must additionally pass VIENNARAY_EMBREE_VERSION=3 to the CMake options, e.g., cmake -B build -G Ninja -D VIENNARAY_EMBREE_VERSION=3 On macOS, you can install Embree using Homebrew with the command: brew install embree.

      The CMake configuration automatically checks if the dependencies are installed. If CMake is unable to find them, the dependencies will be built from source with the buildDependencies target. Notably, ViennaPS operates as a header-only library, eliminating the need for a formal installation process. Nonetheless, we advise following the outlined procedure to neatly organize and relocate all header files to a designated directory:

      git clone https://github.com/ViennaTools/ViennaPS.git
       cd ViennaPS
       
       cmake -B build -G Ninja && cmake --build build
      diff --git a/docs/_site/misc/extrusion.html b/docs/_site/misc/extrusion.html
      index fbeb42e9..b37b95b1 100644
      --- a/docs/_site/misc/extrusion.html
      +++ b/docs/_site/misc/extrusion.html
      @@ -1,4 +1,4 @@
      -             Geometry Extrusion | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Extrude a Geometry from 2D to 3D


      Extrude a 2D domain into 3D, allowing users to define the extrusion direction and extent. Additionally, users have the flexibility to specify the boundary conditions for the extruded domain.

      Example usage:

      C++

      ps::Extrude<double>(domain2D, domain3D, 
      +             Geometry Extrusion | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Extrude a Geometry from 2D to 3D


      Extrude a 2D domain into 3D, allowing users to define the extrusion direction and extent. Additionally, users have the flexibility to specify the boundary conditions for the extruded domain.

      Example usage:

      C++

      ps::Extrude<double>(domain2D, domain3D, 
                           {0., 1.}, // min and max extent in the extruded dim
                           2, // extrude in z-direction
                           {viennals::BoundaryConditionEnum::REFLECTIVE,
      diff --git a/docs/_site/misc/index.html b/docs/_site/misc/index.html
      index da153691..1f5b62f4 100644
      --- a/docs/_site/misc/index.html
      +++ b/docs/_site/misc/index.html
      @@ -1 +1 @@
      -             Miscellaneous | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied          
      +             Miscellaneous | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied          
      diff --git a/docs/_site/misc/logging.html b/docs/_site/misc/logging.html
      index 5af281b1..c0a636d5 100644
      --- a/docs/_site/misc/logging.html
      +++ b/docs/_site/misc/logging.html
      @@ -1,3 +1,3 @@
      -             Logging | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Logging


      Singleton class for thread-safe logging.

      The Logger class can be used to set the verbosity of the program. The verbosity levels are:

      Code Description
      ERROR Log errors only
      WARNING Log warnings
      INFO Log information (e.g. remaining time)
      TIMING Log timing results for the different methods
      INTERMEDIATE Save intermediate results (disk meshes) during the process
      DEBUG Debug

      Example usage: Set the log level of the current program to INTERMEDIATE

      C++

      ps::Logger::setLogLevel(ps::LogLevel::INTERMEDIATE);
      +             Logging | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Logging


      Singleton class for thread-safe logging.

      The Logger class can be used to set the verbosity of the program. The verbosity levels are:

      Code Description
      ERROR Log errors only
      WARNING Log warnings
      INFO Log information (e.g. remaining time)
      TIMING Log timing results for the different methods
      INTERMEDIATE Save intermediate results (disk meshes) during the process
      DEBUG Debug

      Example usage: Set the log level of the current program to INTERMEDIATE

      C++

      ps::Logger::setLogLevel(ps::LogLevel::INTERMEDIATE);
       

      Python

      vps.Logger.setLogLevel(vps.LogLevel.INTERMEDIATE)
       

      diff --git a/docs/_site/misc/parsing.html b/docs/_site/misc/parsing.html index 727528c7..463c0323 100644 --- a/docs/_site/misc/parsing.html +++ b/docs/_site/misc/parsing.html @@ -1 +1 @@ - Parsing Parameters | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

      Parsing Parameters


      Coming soon


      + Parsing Parameters | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

      Parsing Parameters


      Coming soon


      diff --git a/docs/_site/misc/planarize.html b/docs/_site/misc/planarize.html index ebfd5952..d9b7dd93 100644 --- a/docs/_site/misc/planarize.html +++ b/docs/_site/misc/planarize.html @@ -1,4 +1,4 @@ - Planarize Geometry | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

      Planarize a Geometry

      #include <psPlanarize.hpp>
      +             Planarize Geometry | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Planarize a Geometry

      #include <psPlanarize.hpp>
       

      With this class, the user is able to planarize the domain at a specified cutoff position. The planarization process involves subtracting a plane from all materials within the domain using a boolean operation.

      Example usage:

      C++

      ps::Planarize<double, 3>(domain, 
                                0. /*cut off height in z-direction*/).apply();
       

      Python

      vps.Planarize(geometry=domain, cutoffHeight=0.).apply()
      diff --git a/docs/_site/misc/pointData.html b/docs/_site/misc/pointData.html
      index c9adc07b..d18d92aa 100644
      --- a/docs/_site/misc/pointData.html
      +++ b/docs/_site/misc/pointData.html
      @@ -1 +1 @@
      -             Point Data | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Point Data


      The viennals::PointData class is designed to hold data associated with points in space. It’s a generic class that can work with any data type T that satisfies the lsConcepts::IsFloatingPoint concept. By default, it uses double as the data type.

      Member Types:

      • ScalarDataType: A type alias for a vector of T type elements. This is used to represent scalar data.
      • VectorDataType: A type alias for a vector of arrays, each containing 3 elements of T type. This is used to represent vector data.

      Public Methods:

      • insertNextScalarData: This method inserts a new scalar data its corresponding label.

      + Point Data | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

      Point Data


      The viennals::PointData class is designed to hold data associated with points in space. It’s a generic class that can work with any data type T that satisfies the lsConcepts::IsFloatingPoint concept. By default, it uses double as the data type.

      Member Types:

      • ScalarDataType: A type alias for a vector of T type elements. This is used to represent scalar data.
      • VectorDataType: A type alias for a vector of arrays, each containing 3 elements of T type. This is used to represent vector data.

      Public Methods:

      • insertNextScalarData: This method inserts a new scalar data its corresponding label.

      diff --git a/docs/_site/misc/units.html b/docs/_site/misc/units.html index 75e537b8..d26f43eb 100644 --- a/docs/_site/misc/units.html +++ b/docs/_site/misc/units.html @@ -1,4 +1,4 @@ - Units | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

      Units


      Physical models, like the SF6O2 or Fluorocarbon etching models, require the user to specify the units of the input parameters. The user must set the length and time units before creating a model using the units module. The units are global parameters and apply to every model and process in the program.

      Example usage:

      C++

      using namespace viennaps;
      +             Units | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Units


      Physical models, like the SF6O2 or Fluorocarbon etching models, require the user to specify the units of the input parameters. The user must set the length and time units before creating a model using the units module. The units are global parameters and apply to every model and process in the program.

      Example usage:

      C++

      using namespace viennaps;
       units::setLengthUnits(units::LengthUnit::NANOMETER)
       units::setTimeUnits(units::TimeUnit::MINUTE)
       
      diff --git a/docs/_site/models/custom/advectionCallback.html b/docs/_site/models/custom/advectionCallback.html
      index 0002ee89..28f71fa5 100644
      --- a/docs/_site/models/custom/advectionCallback.html
      +++ b/docs/_site/models/custom/advectionCallback.html
      @@ -1 +1 @@
      -             Advection Callback | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Advection Callback


      Coming soon


      + Advection Callback | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

      Advection Callback


      Coming soon


      diff --git a/docs/_site/models/custom/index.html b/docs/_site/models/custom/index.html index 4d5a2f1c..a39f36de 100644 --- a/docs/_site/models/custom/index.html +++ b/docs/_site/models/custom/index.html @@ -1 +1 @@ - Custom Models | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

      Custom Models


      Users can create a custom process model by interfacing one or more of the classes described below and then inserting them into their custom process model.

      • The SurfaceModel class is used to describe surface reactions, combining particle fluxes with the surface chemical reactions.
      • The VelocityField provides the interface between surface velocities and the advection kernel to integrate the Level-Set equation in a time step.
      • ViennaPS seamlessly integrates ViennaRay functionality through the viennaray::Particle class, providing users with a versatile interface to define the key characteristics of the simulated particle species.

      Table of contents


      + Custom Models | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

      Custom Models


      Users can create a custom process model by interfacing one or more of the classes described below and then inserting them into their custom process model.

      • The SurfaceModel class is used to describe surface reactions, combining particle fluxes with the surface chemical reactions.
      • The VelocityField provides the interface between surface velocities and the advection kernel to integrate the Level-Set equation in a time step.
      • ViennaPS seamlessly integrates ViennaRay functionality through the viennaray::Particle class, providing users with a versatile interface to define the key characteristics of the simulated particle species.

      Table of contents


      diff --git a/docs/_site/models/custom/particle.html b/docs/_site/models/custom/particle.html index 0ee30f87..951bd26b 100644 --- a/docs/_site/models/custom/particle.html +++ b/docs/_site/models/custom/particle.html @@ -1 +1 @@ - Particles - Flux Calculation | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

      Particles - Flux Calculation


      ViennaPS integrates advanced ray tracing techniques, leveraging the power of the ViennaRay library based on Intel®’s Embree ray tracing kernel, into the realm of process simulations. This combination enables precise and efficient flux calculations within topography simulations. This process includes launching rays from a source and tracing their paths as they interact with the surface geometry. Ray tracing allows for the simulation of complex phenomena such as shadows, reflections, and transmission of energy through transparent materials.

      ViennaPS integrates ViennaRay functionality through the viennaray::Particle class, providing users with a versatile interface to define the key characteristics of the simulated particle species and tailor their behavior upon surface interactions, including reflective properties. Within the particle class, users can fine-tune parameters governing the initial state of particles, enabling precise control over their interactions with material surfaces. For an in-depth understanding of the viennaray::Particle class and its functionalities, users are encouraged to refer to the detailed documentation available within the ViennaRay documentation.

      Within ViennaPS, a process model has the flexibility to encompass multiple particle species, each contributing distinct characteristics to the simulation. The fluxes computed from these particles are conveniently accessible through the SurfaceModel class. This interface allows users to seamlessly integrate the particle flux data into a physical model, facilitating the simulation of intricate physical processes. By leveraging the calculated fluxes within the surface model, users can construct comprehensive simulations that capture the nuanced interplay of particles and materials, offering a robust framework for exploring diverse scenarios in process simulation.


      + Particles - Flux Calculation | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

      Particles - Flux Calculation


      ViennaPS integrates advanced ray tracing techniques, leveraging the power of the ViennaRay library based on Intel®’s Embree ray tracing kernel, into the realm of process simulations. This combination enables precise and efficient flux calculations within topography simulations. This process includes launching rays from a source and tracing their paths as they interact with the surface geometry. Ray tracing allows for the simulation of complex phenomena such as shadows, reflections, and transmission of energy through transparent materials.

      ViennaPS integrates ViennaRay functionality through the viennaray::Particle class, providing users with a versatile interface to define the key characteristics of the simulated particle species and tailor their behavior upon surface interactions, including reflective properties. Within the particle class, users can fine-tune parameters governing the initial state of particles, enabling precise control over their interactions with material surfaces. For an in-depth understanding of the viennaray::Particle class and its functionalities, users are encouraged to refer to the detailed documentation available within the ViennaRay documentation.

      Within ViennaPS, a process model has the flexibility to encompass multiple particle species, each contributing distinct characteristics to the simulation. The fluxes computed from these particles are conveniently accessible through the SurfaceModel class. This interface allows users to seamlessly integrate the particle flux data into a physical model, facilitating the simulation of intricate physical processes. By leveraging the calculated fluxes within the surface model, users can construct comprehensive simulations that capture the nuanced interplay of particles and materials, offering a robust framework for exploring diverse scenarios in process simulation.


      diff --git a/docs/_site/models/custom/sourceDirection.html b/docs/_site/models/custom/sourceDirection.html index f93c473e..50227342 100644 --- a/docs/_site/models/custom/sourceDirection.html +++ b/docs/_site/models/custom/sourceDirection.html @@ -1,4 +1,4 @@ - Primary Source Direction | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

      Primary Source Direction


      The primary source direction is an optional parameter that allows users to tailor the initial particle direction distribution by specifying a tilt during flux calculation from a source plane. In cases where no primary source direction is explicitly defined, it defaults to being aligned with the surface normal of the source plane.

      If there is no intention to tilt the initial distribution, it is advisable not to set the primary source direction equal to the source plane normal. Instead, using the default value is recommended for a slight performance advantage.

      Example usage:

      auto myModel = ps::SmartPointer<ps::ProcessModel<NumericType, D>>::New();
      +             Primary Source Direction | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Primary Source Direction


      The primary source direction is an optional parameter that allows users to tailor the initial particle direction distribution by specifying a tilt during flux calculation from a source plane. In cases where no primary source direction is explicitly defined, it defaults to being aligned with the surface normal of the source plane.

      If there is no intention to tilt the initial distribution, it is advisable not to set the primary source direction equal to the source plane normal. Instead, using the default value is recommended for a slight performance advantage.

      Example usage:

      auto myModel = ps::SmartPointer<ps::ProcessModel<NumericType, D>>::New();
       double tiltingAngle = 30. * M_PI / 180.; // tilting angle of 30 degree
       double x = -std::sin(tiltingAngle);
       double y = -std::cos(tiltingAngle);
      diff --git a/docs/_site/models/custom/surfaceModel.html b/docs/_site/models/custom/surfaceModel.html
      index ffd18e6f..120a82ba 100644
      --- a/docs/_site/models/custom/surfaceModel.html
      +++ b/docs/_site/models/custom/surfaceModel.html
      @@ -1,4 +1,4 @@
      -             Surface Model | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Surface Model


      Summary

      • The SurfaceModel class is used to describe surface reactions, combining particle fluxes with the surface chemical reactions.
      • The velocities used for surface advection in a time step are calculated through the calculateVelocities() function.
      • Surface coverages can be used to track the coverage a chemical species on the surface through a time step.
      • The coverages can be initialized to equilibrium by iteratively calculating the fluxes on the surface and updating the coverages. The number of iterations to initialize the coverages can be specified through the Process.
      • Coverages and fluxes are stored as viennals::PointData.

      The SurfaceModel class serves as a comprehensive framework for detailing surface chemistries. Users have the flexibility to create a customized child class where they can precisely dictate how surface coverages evolve, driven by the rates at which particles impact the surface.

      One key feature is the capability to monitor surface coverages, providing insights into the presence of chemical species on the surface throughout a simulation’s time step. To initialize the coverage data vector, the method initializeCoverages() is employed.

        void initializeCoverages(unsigned numSurfacePoints) override {
      +             Surface Model | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Surface Model


      Summary

      • The SurfaceModel class is used to describe surface reactions, combining particle fluxes with the surface chemical reactions.
      • The velocities used for surface advection in a time step are calculated through the calculateVelocities() function.
      • Surface coverages can be used to track the coverage a chemical species on the surface through a time step.
      • The coverages can be initialized to equilibrium by iteratively calculating the fluxes on the surface and updating the coverages. The number of iterations to initialize the coverages can be specified through the Process.
      • Coverages and fluxes are stored as viennals::PointData.

      The SurfaceModel class serves as a comprehensive framework for detailing surface chemistries. Users have the flexibility to create a customized child class where they can precisely dictate how surface coverages evolve, driven by the rates at which particles impact the surface.

      One key feature is the capability to monitor surface coverages, providing insights into the presence of chemical species on the surface throughout a simulation’s time step. To initialize the coverage data vector, the method initializeCoverages() is employed.

        void initializeCoverages(unsigned numSurfacePoints) override {
           // a single set of coverages is initialized here
           std::vector<NumericType> someCoverage(numSurfacePoints, 0);
       
      diff --git a/docs/_site/models/custom/velocityField.html b/docs/_site/models/custom/velocityField.html
      index 7b43f932..2db5c878 100644
      --- a/docs/_site/models/custom/velocityField.html
      +++ b/docs/_site/models/custom/velocityField.html
      @@ -1 +1 @@
      -             Velocity Field | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Velocity Field


      Surface Velocity Extension

      Option Description
      0 Do not translate level set ID to surface ID. This should be enabled if the surface velocity is only provided in the psVelocityField class and not through the psSurfaceModel class.
      1 Use unordered map to translate level set ID to surface ID.
      2 Use KD-tree to translate level set ID to surface ID. The KD-tree uses a nearest neighbor lookup to determine the closest surface point and according velocity.

      + Velocity Field | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

      Velocity Field


      Surface Velocity Extension

      Option Description
      0 Do not translate level set ID to surface ID. This should be enabled if the surface velocity is only provided in the psVelocityField class and not through the psSurfaceModel class.
      1 Use unordered map to translate level set ID to surface ID.
      2 Use KD-tree to translate level set ID to surface ID. The KD-tree uses a nearest neighbor lookup to determine the closest surface point and according velocity.

      diff --git a/docs/_site/models/index.html b/docs/_site/models/index.html index b7bce103..7cf281c8 100644 --- a/docs/_site/models/index.html +++ b/docs/_site/models/index.html @@ -1,2 +1,2 @@ - Process Models | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

      Process Models

      #include <psProcessModel.hpp>
      +             Process Models | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Process Models

      #include <psProcessModel.hpp>
       

      All the information about the process is encompassed in the class ProcessModel, as it includes all the particle type information required for ray tracing, the surface model, as well as advection callbacks, for generating volume models describing chemical processes inside the material.

      Users have the flexibility to configure their own custom process model or opt for pre-defined models encompassing frequently used processes.


      Table of contents


      diff --git a/docs/_site/models/prebuilt/SF6O2Etching.html b/docs/_site/models/prebuilt/SF6O2Etching.html index 9bb7d0b4..423d6525 100644 --- a/docs/_site/models/prebuilt/SF6O2Etching.html +++ b/docs/_site/models/prebuilt/SF6O2Etching.html @@ -1,31 +1,26 @@ - SF6O2 Etching | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

      SF6O2 Etching

      #include <psSF6O2Etching.hpp>
      -

      The model for SF6O2 etching of silicon is based on a model by Belen et al. 1 and summarized here. For implementation details refer to here. To describe the feature scale simulation of SF6O2 plasma etching, the surface rates of both ions and neutral particles, specifically fluorine and oxygen, and the surface coverages of neutrals, are considered. Ray tracing is used for the calculation of the surface rates, which are used for calculating coverages during each time step. The etch rate is determined the three physical phenomena:

      • Chemical etching
      • Physical sputtering
      • Ion-enhanced etching

      In the process of chemical etching, the fluorine from the SF6 species reacts with the exposed silicon surface. Physical sputtering is caused by high-energy ions impacting the surface. Due to an applied bias, ions strike the wafer surface with a high enough kinetic energy, $E_{ion} > E_{th}$ to break the existing bonds in the silicon wafer or other exposed materials. Lastly, ion-enhanced etching, also known as reactive ion etching (RIE), combines the two previous effects. Since silicon surfaces that are saturated with fluorine are more prone to physical sputtering, the threshold energy for releasing the silicon atom $E_{th}$ is significantly reduced compared to non-fluorinated surfaces. Therefore, ion-enhanced etching provides an etch rate that is larger than the sum of the chemical etching and sputtering.

      The surface can be covered in fluorine or oxygen. The physical model keeps track of these coverages, given by $\theta_F$ and $\theta_O$, respectively, by calculating the flux-induced rates and considering the coverages from the previous time step. They are calculated with Langmuir–Hinshelwood-type surface site balance equations, given by:

      \begin{equation} \sigma_{Si}\cfrac{d\theta_{F}}{dt}=\gamma_{F}\Gamma_{F}\left(1-\theta_{F}-\theta_{O}\right)-k\sigma_{Si}\theta_{F}-2Y_{ie}\Gamma_{i}\theta_{F} \label{equ:thetaF} \end{equation}

      \begin{equation} \sigma_{Si}\cfrac{d\theta_{O}}{dt}=\gamma_{O}\Gamma_{O}\left(1-\theta_{F}-\theta_{O}\right)-\beta\sigma_{Si}\theta_{O}-Y_{O}\Gamma_{i}\theta_{O} \label{equ:thetaO} \end{equation}

      The term $\sigma_{Si}$ represents the density of silicon at the surface point $\vec{x}$ which is not included in the equations for legibility; $\Gamma_F$, $\Gamma_O$, and $\Gamma_i$ are the emitted fluorine, oxygen, and ion fluxes, respectively; $\gamma_F$ and $\gamma_O$ are the sticking coefficients for fluorine and oxygen on a non-covered silicon substrate, respectively; $k$ is the chemical etch reaction rate constant; $\beta$ is the oxygen recombination rate constant; and $Y_{ie}$ and $Y_O$ are the total ion-enhanced and oxygen etching yields, respectively. $Y_{ie}$ and $Y_O$ are yield functions that are dependent on the ion energies in the reactor.

      Since the surface movement is significantly smaller than the considered fluxes, it can be assumed that it does not impact the calculation. With this assumption of a pseudo-steady-state, the coverage equations can be set equal to zero, resulting in the following surface coverage equations: \begin{equation} \theta_{F}=\left[1+\left(\cfrac{k\sigma_{Si}+2Y_{ie}\Gamma_{i}}{\gamma_{F}\Gamma_{F}}\right)\left(1+\cfrac{\gamma_{O}\Gamma_{O}}{\beta\sigma_{Si}+Y_{O}\Gamma_{i}}\right)\right]^{-1} \end{equation}

      \begin{equation} \theta_{O}=\left[1+\left(\cfrac{\beta\sigma_{Si}+Y_{O}\Gamma_{i}}{\gamma_{O}\Gamma_{O}}\right)\left(1+\cfrac{\gamma_{F}\Gamma_{F}}{k\sigma_{Si}+2Y_{ie}\Gamma_{i}}\right)\right]^{-1} \end{equation}

      The reason that pseudo-steady-state can be assumed is that the incoming fluxes of all involved particles are in the order of 10$^{16}$–10$^{19}$ cm-1s-1, which is significantly larger than the surface etch rate ER, which is typically in the range of several nanometers per second. The oxygen particles do not take part in surface removal; instead, they occupy an area on the top surface layer and inhibit the effects of chemical etching by fluorine. Relating it to the parameters in the equation, the presence of oxygen (denoted by its flux $\Gamma_{O}$) tends to reduce $\theta_{F}$. Increasing the oxygen flux $\Gamma_O$ increases the overall expression in the square brackets, which means $\theta_{F}$ decreases. Since oxygen has a passivating effect, the etching of silicon proceeds only due to its reaction with fluorine and physical sputtering due to the incoming ion flux. At locations where oxygen coverage is high, only ion sputtering takes place. This brings us to the expression for the etch rate (ER), which is used to move the surface

      \begin{equation} \textrm{ER}=\cfrac{1}{\rho_{Si}}\left(\cfrac{k\sigma_{Si}\theta_{F}}{4}+Y_{p}\Gamma_{i}+Y_{ie}\Gamma_{i}\theta_{F}\right), \end{equation} where $\rho_{Si}$ is the silicon density. The first, second, and third terms in the brackets of the etch rate equation represent the chemical etching, physical sputtering, and ion-enhanced etching, respectively.

      Ions

      Each ion is endowed with an initial energy and direction upon creation on the source plane. The assignment of initial energies is governed by a normal distribution, characterized by a mean energy value and an energy sigma, thus allowing for stochastic variations in the initial energy states of the ions. The distribution of initial ion directions is given by a power cosine source distribution, which is defined by the exponent of the power cosine distribution.

      Upon impact with the surface, an energy- and angle-dependent yield is computed, which contributes to the specific surface point’s rate. The yield is expressed as: \begin{equation} Y(E,\theta) = A\left(\sqrt{E} - \sqrt{E_{th}}\right)f(\theta), \end{equation} where $E$ denotes the particle energy and $\theta$ its incident angle. Here, $A$ represents a yield coefficient, and $E_{\text{th}}$ denotes the material’s threshold energy for physical sputtering. The function $f(\theta)$, which characterizes the angle-dependence of the yield. For sputtering, the function is given by: \begin{equation} f(\theta) = (1 + B_{sp}(1-\cos^2(\theta)))\cos(\theta), \end{equation} while for ion-enhanced etching, the function is given by: \begin{equation} f(\theta) = \cos(\theta). \end{equation}

      The ions can also reflect from the surface. Their energy loss during reflection is described by the model proposed by Belen et al 1. The current ray energy is multiplied by a factor $E_\textrm{ref}$ ($0 \leq E_\textrm{ref} \leq 1$) which depends on the incoming angle $\theta$ in the following way: \begin{equation} E_{\textrm{ref}}= 1-(1-A)\frac{\frac{\pi}{2}-\theta}{\frac{\pi}{2}-\theta_\textrm{inflect}} \quad \text{ if } \theta \geqslant \theta_\textrm{inflect} \end{equation} \begin{equation} E_{\textrm{ref}}=\mathrm{A}\left(\frac{\theta}{\theta_\textrm{inflect}}\right)^{n_l} \quad \text{ if } \theta<\theta_\textrm{inflect}, \end{equation} where $A = (1 + n(\frac{\pi}{2 \theta_\textrm{inflect}} - 1))^{-1}$.

      Ions striking the surface at an angle denoted by $\theta$ relative to the surface normal undergo reflection, where the angular dispersion is characterized by a cosine function centered around the direction of specular reflection defined by $\theta_\textrm{spec}$. This reflection process distinguishes between ions approaching the surface at glancing angles, which undergo nearly perfect specular reflection, and those striking the surface perpendicularly, which undergo nearly diffuse reflection.

      \begin{equation} \mathrm{P}(\phi) \propto \cos \left(\frac{\pi}{2} \frac{\phi}{\frac{\pi}{2}-\theta_\textrm{spec}}\right) \quad \text{ if } \theta_\textrm{inc} \leqslant \theta_\textrm{min} \end{equation}

      \begin{equation} \mathrm{P}(\phi) \propto \cos \left(\frac{\pi}{2} \frac{\phi}{\frac{\pi}{2}-\theta_\textrm{min}}\right) \quad \text{ if } \theta_{\textrm{inc}}>\theta_{\textrm{min}} \end{equation}

      The ray’s reflected direction is randomly chosen from a cone around the specular direction. The opening angle of this cone is given by the incidence angle $\theta$.

      drawing

      Implementation

      SF6O2Etching(const double ionFlux, const double etchantFlux,
      +             SF6O2 Etching | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      SF6O2 Etching

      #include <psSF6O2Etching.hpp>
      +

      The model for SF6O2 etching of silicon is based on a model by Belen et al. 1 and summarized here. For implementation details refer to here. To describe the feature scale simulation of SF6O2 plasma etching, the surface rates of both ions and neutral particles, specifically fluorine and oxygen, and the surface coverages of neutrals, are considered. Ray tracing is used for the calculation of the surface rates, which are used for calculating coverages during each time step. The etch rate is determined the three physical phenomena:

      • Chemical etching
      • Physical sputtering
      • Ion-enhanced etching

      In the process of chemical etching, the fluorine from the SF6 species reacts with the exposed silicon surface. Physical sputtering is caused by high-energy ions impacting the surface. Due to an applied bias, ions strike the wafer surface with a high enough kinetic energy, $E_{ion} > E_{th}$ to break the existing bonds in the silicon wafer or other exposed materials. Lastly, ion-enhanced etching, also known as reactive ion etching (RIE), combines the two previous effects. Since silicon surfaces that are saturated with fluorine are more prone to physical sputtering, the threshold energy for releasing the silicon atom $E_{th}$ is significantly reduced compared to non-fluorinated surfaces. Therefore, ion-enhanced etching provides an etch rate that is larger than the sum of the chemical etching and sputtering.

      The surface can be covered in fluorine or oxygen. The physical model keeps track of these coverages, given by $\theta_F$ and $\theta_O$, respectively, by calculating the flux-induced rates and considering the coverages from the previous time step. They are calculated with Langmuir–Hinshelwood-type surface site balance equations, given by:

      \begin{equation} \sigma_{Si}\cfrac{d\theta_{F}}{dt}=\beta_{F}\Gamma_{F}\left(1-\theta_{F}-\theta_{O}\right)-k\sigma_{Si}\theta_{F}-2Y_{ie}\Gamma_{i}\theta_{F} \label{equ:thetaF} \end{equation}

      \begin{equation} \sigma_{Si}\cfrac{d\theta_{O}}{dt}=\beta_{O}\Gamma_{O}\left(1-\theta_{F}-\theta_{O}\right)-\beta\sigma_{Si}\theta_{O}-Y_{O}\Gamma_{i}\theta_{O} \label{equ:thetaO} \end{equation}

      The term $\sigma_{Si}$ represents the density of silicon at the surface point $\vec{x}$ which is not included in the equations for legibility; $\Gamma_F$, $\Gamma_O$, and $\Gamma_i$ are the emitted fluorine, oxygen, and ion fluxes, respectively; $\beta_F$ and $\beta_O$ are the sticking coefficients for fluorine and oxygen on a non-covered silicon substrate, respectively; $k$ is the chemical etch reaction rate constant; $\beta$ is the oxygen recombination rate constant; and $Y_{ie}$ and $Y_O$ are the total ion-enhanced and oxygen etching yields, respectively. $Y_{ie}$ and $Y_O$ are yield functions that are dependent on the ion energies in the reactor.

      Since the surface movement is significantly smaller than the considered fluxes, it can be assumed that it does not impact the calculation. With this assumption of a pseudo-steady-state, the coverage equations can be set equal to zero, resulting in the following surface coverage equations: \begin{equation} \theta_{F}=\left[1+\left(\cfrac{k\sigma_{Si}+2Y_{ie}\Gamma_{i}}{\gamma_{F}\Gamma_{F}}\right)\left(1+\cfrac{\gamma_{O}\Gamma_{O}}{\beta\sigma_{Si}+Y_{O}\Gamma_{i}}\right)\right]^{-1} \end{equation}

      \begin{equation} \theta_{O}=\left[1+\left(\cfrac{\beta\sigma_{Si}+Y_{O}\Gamma_{i}}{\gamma_{O}\Gamma_{O}}\right)\left(1+\cfrac{\gamma_{F}\Gamma_{F}}{k\sigma_{Si}+2Y_{ie}\Gamma_{i}}\right)\right]^{-1} \end{equation}

      The reason that pseudo-steady-state can be assumed is that the incoming fluxes of all involved particles are in the order of 10$^{16}$–10$^{19}$ cm-1s-1, which is significantly larger than the surface etch rate ER, which is typically in the range of several nanometers per second. The oxygen particles do not take part in surface removal; instead, they occupy an area on the top surface layer and inhibit the effects of chemical etching by fluorine. Relating it to the parameters in the equation, the presence of oxygen (denoted by its flux $\Gamma_{O}$) tends to reduce $\theta_{F}$. Increasing the oxygen flux $\Gamma_O$ increases the overall expression in the square brackets, which means $\theta_{F}$ decreases. Since oxygen has a passivating effect, the etching of silicon proceeds only due to its reaction with fluorine and physical sputtering due to the incoming ion flux. At locations where oxygen coverage is high, only ion sputtering takes place. This brings us to the expression for the etch rate (ER), which is used to move the surface

      \begin{equation} \textrm{ER}=\cfrac{1}{\rho_{Si}}\left(\cfrac{k\sigma_{Si}\theta_{F}}{4}+Y_{p}\Gamma_{i}+Y_{ie}\Gamma_{i}\theta_{F}\right), \end{equation} where $\rho_{Si}$ is the silicon density. The first, second, and third terms in the brackets of the etch rate equation represent the chemical etching, physical sputtering, and ion-enhanced etching, respectively.

      Ions

      Each ion is endowed with an initial energy and direction upon creation on the source plane. The assignment of initial energies is governed by a normal distribution, characterized by a mean energy value and an energy sigma, thus allowing for stochastic variations in the initial energy states of the ions. The distribution of initial ion directions is given by a power cosine source distribution, which is defined by the exponent of the power cosine distribution.

      Upon impact with the surface, an energy- and angle-dependent yield is computed, which contributes to the specific surface point’s rate. The yield is expressed as: \begin{equation} Y(E,\theta) = A\left(\sqrt{E} - \sqrt{E_{th}}\right)f(\theta), \end{equation} where $E$ denotes the particle energy and $\theta$ its incident angle. Here, $A$ represents a yield coefficient, and $E_{\text{th}}$ denotes the material’s threshold energy for physical sputtering. The function $f(\theta)$, which characterizes the angle-dependence of the yield. For sputtering, the function is given by: \begin{equation} f(\theta) = (1 + B_{sp}(1-\cos^2(\theta)))\cos(\theta), \end{equation} while for ion-enhanced etching, the function is given by: \begin{equation} f(\theta) = \cos(\theta). \end{equation}

      The ions can also reflect from the surface. Their energy loss during reflection is described by the model proposed by Belen et al 1. The current ray energy is multiplied by a factor $E_\textrm{ref}$ ($0 \leq E_\textrm{ref} \leq 1$) which depends on the incoming angle $\theta$ in the following way: \begin{equation} E_{\textrm{ref}}= 1-(1-A)\frac{\frac{\pi}{2}-\theta}{\frac{\pi}{2}-\theta_\textrm{inflect}} \quad \text{ if } \theta \geqslant \theta_\textrm{inflect} \end{equation} \begin{equation} E_{\textrm{ref}}=\mathrm{A}\left(\frac{\theta}{\theta_\textrm{inflect}}\right)^{n_l} \quad \text{ if } \theta<\theta_\textrm{inflect}, \end{equation} where $A = (1 + n(\frac{\pi}{2 \theta_\textrm{inflect}} - 1))^{-1}$.

      Ions striking the surface at an angle denoted by $\theta$ relative to the surface normal undergo reflection, where the angular dispersion is characterized by a cosine function centered around the direction of specular reflection defined by $\theta_\textrm{spec}$. This reflection process distinguishes between ions approaching the surface at glancing angles, which undergo nearly perfect specular reflection, and those striking the surface perpendicularly, which undergo nearly diffuse reflection.

      \begin{equation} \mathrm{P}(\phi) \propto \cos \left(\frac{\pi}{2} \frac{\phi}{\frac{\pi}{2}-\theta_\textrm{spec}}\right) \quad \text{ if } \theta_\textrm{inc} \leqslant \theta_\textrm{min} \end{equation}

      \begin{equation} \mathrm{P}(\phi) \propto \cos \left(\frac{\pi}{2} \frac{\phi}{\frac{\pi}{2}-\theta_\textrm{min}}\right) \quad \text{ if } \theta_{\textrm{inc}}>\theta_{\textrm{min}} \end{equation}

      The ray’s reflected direction is randomly chosen from a cone around the specular direction. The opening angle of this cone is given by the incidence angle $\theta$.

      drawing

      The ions sticking probability is described by two parameters $\theta_\textrm{Rmin}$ and $\theta_\textrm{Rmax}$: \begin{equation} \beta_{ion} = 1 \quad \text{ if }\theta \leq \theta_\textrm{Rmin} \end{equation} \begin{equation} \beta_{ion} = 1 - \frac{\theta - \theta_\textrm{Rmin}}{\theta_\textrm{Rmax}- \theta_\textrm{Rmin}} \quad \text{ if }\theta > \theta_\textrm{Rmin} \end{equation}

      Neutrals

      There are two neutral particle species in this model: etchant (Flourine) and oxygen. The sticking probability is a function of the surface coverage and the sticking probability of the respective particle. The sticking probability is given by: \begin{equation} \beta_{eff_{F/O}} = \beta_{F/O} (1 - \theta_F - \theta_O) \end{equation} Neutrals reflect diffusely from the surface with a cosine distribution.

      Implementation

      Time and length units have to be set before initializing the model. For details see Units.

      SF6O2Etching() // use default values only
      +SF6O2Etching(const double ionFlux, const double etchantFlux,
                    const double oxygenFlux, const NumericType meanEnergy /* eV */,
                    const NumericType sigmaEnergy /* eV */, 
                    const NumericType ionExponent = 100.,
                    const NumericType oxySputterYield = 2.,
                    const NumericType etchStopDepth =
                          std::numeric_limits<NumericType>::lowest())
      -

      Time and length units have to be set before initializing the model. For details see Units.

      Parameter Description Type
      ionFlux Ion flux for the SF6O2 etching process. double
      etchantFlux Etchant flux for the SF6O2 etching process. double
      oxygenFlux Oxygen flux for the SF6O2 etching process. double
      meanEnergy Mean energy of ions (eV). NumericType
      sigmaEnergy Energy distribution standard deviation (eV). NumericType
      ionExponent (Optional) Exponent in the power cosine source distribution of ions for initial directions. Default is set to 100. NumericType
      oxySputterYield (Optional) Oxygen sputtering yield. Default is set to 2. NumericType
      etchStopDepth (Optional) Depth at which etching should stop. Default is negative infinity. NumericType

      All flux values are units 1015 / cm2 /s2 .

      Alternatively, users can access and modify all detailed parameters by retrieving the parameter struct, which encapsulates the following values:

      Parameter Description Default Value
      ionFlux Ion flux (1015 /cm² /s) 12.0
      etchantFlux Etchant flux (1015 /cm² /s) 1800.0
      oxygenFlux Oxygen flux (1015 /cm² /s) 100.0
      etchStopDepth Depth at which etching stops -inf
      beta_F Sticking probability for fluorine 0.7
      beta_O Sticking probability for oxygen 1.0
      Mask.rho Mask density (1022 atoms/cm³) 500.0
      Mask.beta_F Mask sticking probability for fluorine 0.01
      Mask.beta_O Mask sticking probability for oxygen 0.1
      Mask.Eth_sp Mask sputtering threshold energy (eV) 20.0
      Mask.A_sp Mask sputtering coefficient 0.0139
      Mask.B_sp Mask sputtering coefficient 9.3
      Si.rho Silicon density (1022 atoms/cm³) 5.02
      Si.Eth_sp Silicon sputtering threshold energy (eV) 20.0
      Si.Eth_ie Silicon ion enhanced etching threshold energy (eV) 4.0
      Si.A_sp Silicon sputtering coefficient 0.0337
      Si.B_sp Silicon sputtering coefficient 9.3
      Si.A_ie Silicon ion enhanced etching coefficient 0.0361
      Si.k_sigma Silicon chemical etch rate coefficient (1015 /cm² /s) 300.
      Si.beta_sigma Silicon oxygen recombination coefficient (1015 /cm² /s) 0.05
      Passivation.Eth_ie Passivation ion enhanced etching threshold energy (eV) 4.0
      Passivation.A_ie Passivation ion enhanced etching coefficient 0.0361
      Ions.meanEnergy Mean ion energy (eV) 100.0
      Ions.sigmaEnergy Standard deviation of ion energy (eV) 10.0
      Ions.exponent Exponent of power cosine source distribution of initial ion directions 500.0
      Ions.inflectAngle Inflection angle (rad) 1.55334303
      Ions.n_l Exponent of reflection power 10.0
      Ions.minAngle Minimum cone angle for ion reflection 1.3962634

      Example usage:

      C++

      // namespace viennaps
      +SF6O2Etching(const SF6O2Parameters<NumericType> &parameters)
      +

      Users can access and modify all detailed parameters by creating a SF6O2Parameters struct, which encapsulates the following values:

      All flux values are units 1015 / cm2 /s2.

      Parameter Description Default Value
      ionFlux Ion flux 12.0
      etchantFlux Etchant flux 1800.0
      oxygenFlux Oxygen flux 100.0
      beta_F Sticking probability map for fluorine 0.7 (on Si and Mask)
      beta_O Sticking probability map for oxygen 1.0 (on Si and Mask)
      etchStopDepth Depth at which etching stops -inf
      fluxIncludeSticking Include the effective sticking probability when accumlating fluxes, Required more iterations to reach coverage convergence false
      Mask.rho Mask density (1022 atoms/cm³) 500.0
      Mask.Eth_sp Mask sputtering threshold energy (eV) 20.0
      Mask.A_sp Mask sputtering coefficient 0.0139
      Mask.B_sp Mask sputtering coefficient 9.3
      Si.rho Silicon density (1022 atoms/cm³) 5.02
      Si.Eth_sp Silicon sputtering threshold energy (eV) 20.0
      Si.Eth_ie Silicon ion enhanced etching threshold energy (eV) 15.0
      Si.A_sp Silicon sputtering coefficient 0.0337
      Si.B_sp Silicon sputtering coefficient 9.3
      Si.A_ie Silicon ion enhanced etching coefficient 7.0
      Si.k_sigma Silicon chemical etch rate coefficient (1015 /cm² /s) 300.
      Si.beta_sigma Silicon oxygen recombination coefficient (1015 /cm² /s) 0.05
      Passivation.Eth_ie Passivation ion enhanced etching threshold energy (eV) 10.0
      Passivation.A_ie Passivation ion enhanced etching coefficient 3.0
      Ions.meanEnergy Mean ion energy (eV) 100.0
      Ions.sigmaEnergy Standard deviation of ion energy (eV) 10.0
      Ions.exponent Exponent of power cosine source distribution of initial ion directions 500.0
      Ions.inflectAngle Inflection angle (rad) 1.55334303
      Ions.n_l Exponent of reflection power 10.0
      Ions.minAngle Minimum cone angle for ion reflection 1.3962634
      Ions.thetaRMin Minimum angle for ion sticking probability 70.0 (deg)
      Ions.thetaRMax Maximum angle for ion sticking probability 90.0 (deg)

      Example usage:

      C++

      // namespace viennaps
       ...
      -auto model = SmartPointer<SF6O2Etching<NumericType, D>>::New();
      -auto &parameters = model->getParameters();
      -parameters.ionFlux = 10.; 
      +SF6O2Parameters<NumericType> parameters;
      +parameters.ionFlux = 10.;
       parameters.Mask.rho = 500.;
      -// this modifies a direct reference of the parameters
      +
      +auto model = SmartPointer<SF6O2Etching<NumericType, D>>::New(parameters);
       ...
       

      Python

      ...
      -model = vps.SF6O2Etching()
      -parameters = model.getParameters()
      +parameters = vps.SF6O2Parameters()
       parameters.ionFlux = 10.
       parameters.Mask.rho = 500.
      -# this modifies a direct reference of the parameters
      -...
      -

      SF6 Etching

      The SF6 etching model is a simplified version of the SF6O2 etching model. The model only considers the etching of silicon by fluorine ions. The model is based on the same principles as the SF6O2 etching model, but without the presence of oxygen. The model is implemented in the same way as the SF6O2 etching model, but with the following parameters:

      
      -SF6Etching(const double ionFlux, const double etchantFlux,
      -           const NumericType meanEnergy /* eV */,
      -           const NumericType sigmaEnergy /* eV */, // 5 parameters
      -           const NumericType ionExponent = 300.,
      -           const NumericType etchStopDepth =
      -                std::numeric_limits<NumericType>::lowest()) 
      -
      Parameter Description Type
      ionFlux Ion flux for the SF6 etching process. double
      etchantFlux Etchant flux for the SF6 etching process. double
      meanEnergy Mean energy of ions (eV). NumericType
      sigmaEnergy Energy distribution standard deviation (eV). NumericType
      ionExponent (Optional) Exponent in the power cosine source distribution of ions for initial directions. Default is set to 300. NumericType
      etchStopDepth (Optional) Depth at which etching should stop. Default is negative infinity. NumericType

      All flux values are units 1015 / cm2 /s2 .

      The detailed parameters can be accessed and modified in the same way as for the SF6O2 etching model.


      1. Rodolfo Jun Belen, Sergi Gomez, Mark Kiehlbauch, David Cooperberg, Eray S. Aydil; Feature-scale model of Si etching in SF6 plasma and comparison with experiments. J. Vac. Sci. Technol. A 1 January 2005; 23 (1): 99–113. https://doi.org/10.1116/1.1830495  2


      + +model = vps.SF6O2Etching(parameters) +... +

      1. Rodolfo Jun Belen, Sergi Gomez, Mark Kiehlbauch, David Cooperberg, Eray S. Aydil; Feature-scale model of Si etching in SF6 plasma and comparison with experiments. J. Vac. Sci. Technol. A 1 January 2005; 23 (1): 99–113. https://doi.org/10.1116/1.1830495  2


      diff --git a/docs/_site/models/prebuilt/TEOSPECVD.html b/docs/_site/models/prebuilt/TEOSPECVD.html index 0c95ccdb..a1777e73 100644 --- a/docs/_site/models/prebuilt/TEOSPECVD.html +++ b/docs/_site/models/prebuilt/TEOSPECVD.html @@ -1,4 +1,4 @@ - TEOSPECVD Process | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

      TEOS Plasma-Enhanced (PE) Chemical Vapor Deposition (CVD)

      #include <psTEOSPECVD.hpp>
      +             TEOSPECVD Process | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      TEOS Plasma-Enhanced (PE) Chemical Vapor Deposition (CVD)

      #include <psTEOSPECVD.hpp>
       

      The TEOS PE CVD process is a deposition process with an additional plasma-enhanced component, which supplies directional ions during the process. The process is specified by two particle species: the TEOS precursor radicals and the ions. The depostion rate is controlled by a reaction order for both radicals and ions, where the final surface velocity $v$ follows: \begin{equation} v = R_{rad} \cdot \Gamma_{rad}^{o_{rad}} + R_{ion} \cdot \Gamma_{ion}^{o_{ion}} \end{equation} where $R_{rad}$ and $R_{ion}$ are the rates of the radicals and ions, respectively, and $\Gamma_{rad}$ and $\Gamma_{ion}$ are the fluxes of the radicals and ions, respectively. The exponents $o_{rad}$ and $o_{ion}$ are the reaction orders of the radicals and ions, respectively.

      The sticking probability of the TEOS precursor radicals and the ions can be specified, as well as the exponent of the power cosine distribution of the ions. The TEOS radicals reflect diffusively from the surface, while the ions can reflect near specularly from the surface with a minimum angle specified.

      Implementation

      TEOSPECVD(const NumericType pRadicalSticking, const NumericType pRadicalRate,
                 const NumericType pIonRate, const NumericType pIonExponent,
                 const NumericType pIonSticking = 1.,
      diff --git a/docs/_site/models/prebuilt/anisotropic.html b/docs/_site/models/prebuilt/anisotropic.html
      index ff701ffe..cec5f30b 100644
      --- a/docs/_site/models/prebuilt/anisotropic.html
      +++ b/docs/_site/models/prebuilt/anisotropic.html
      @@ -1,2 +1,2 @@
      -             Anisotropic Process | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Anisotropic Process

      #include <psAnisotropicProcess.hpp>
      +             Anisotropic Process | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Anisotropic Process

      #include <psAnisotropicProcess.hpp>
       


      diff --git a/docs/_site/models/prebuilt/directional.html b/docs/_site/models/prebuilt/directional.html index b0327ef9..520b90b2 100644 --- a/docs/_site/models/prebuilt/directional.html +++ b/docs/_site/models/prebuilt/directional.html @@ -1,4 +1,4 @@ - Directional Etching | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

      Directional Etching

      #include <psDirectionalEtching.hpp>
      +             Directional Etching | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Directional Etching

      #include <psDirectionalEtching.hpp>
       

      The Directional Etching Model simulates anisotropic material removal in semiconductor fabrication processes. It models etching where material removal occurs preferentially in a specified direction, influenced by both directional and isotropic velocity components.

      // namespace viennaps
       DirectionalEtching(const std::array<NumericType, 3> &direction,
                          NumericType directionalVelocity = 1.,
      diff --git a/docs/_site/models/prebuilt/fluorocarbonEtching.html b/docs/_site/models/prebuilt/fluorocarbonEtching.html
      index ca223d7b..5b40f32e 100644
      --- a/docs/_site/models/prebuilt/fluorocarbonEtching.html
      +++ b/docs/_site/models/prebuilt/fluorocarbonEtching.html
      @@ -1,4 +1,4 @@
      -             Fluorocarbon Etching | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Fluorocarbon Etching

      #include <psFluorocarbonEtching.hpp>
      +             Fluorocarbon Etching | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Fluorocarbon Etching

      #include <psFluorocarbonEtching.hpp>
       

      Our model assumes that, in any complex plasma etch process, there are four fundamental types of particles: neutral, etchant, depositing polymer particles and ions. Due to the long etch times, compared to surface reaction time scales, we can safely assume that each of these substances’ concentrations will reach a steady state on the surface. Therefore, the surface coverages of all involved particle types $\phi_x$, where $x$ represents etchant (e), polymer (p), etchant on polymer (ep), and ions (i), are expressed by the following equations: \begin{equation} \frac{d \phi_e}{dt}=J_{e} S_{e}\left(1-\phi_{e}-\phi_{p}\right)-k_{i e} J_{i} Y_{ie} \phi_{e}-k_{e v} J_{e v} \phi_{e} \approx 0; \end{equation} \begin{equation} \frac{d \phi_{p}}{d t}=J_{p} S_{p}-J_{i} Y_{p} \phi_{p} \phi_{p e} \approx 0; \end{equation} \begin{equation} \frac{d \phi_{p e}}{d t}=J_{e} S_{p e}\left(1-\phi_{p e}\right)-J_{i} Y_{p} \phi_{p e} \approx 0. \end{equation} Here, $J_x$ and $S_x$ represent the different particle fluxes and sticking probabilities, respectively. $Y_{ie}$ is the ion-enhanced etching yield for etchant particles, $Y_p$ is the ion-enhanced etching yield on polymer, $Y_{sp}$ gives the physical ion sputtering yield, and $k_{ie}$ and $k_{ev}$ are the stoichiometric factors for ion-enhanced etching and evaporation, respectively, which are determined by the chemical etching reaction. By solving these steady state equations for the coverages, one can determine etch or deposition rates on the surface. If deposition of polymer dominates, the surface normal velocity is positive and is given by \begin{equation} v=\frac{1}{\rho_{p}}\left(J_{p} S_{p}-Y_{p} J_{i} \phi_{p e}\right), \end{equation} where $\rho_p$ is the atomic polymer density. The first term $J_{p} S_{p}$ gives the rate of polymer particles reaching and adsorbing on the surface, while the second term $Y_{p} J_{i} \phi_{p e}$ describes the removal of polymer by ion-enhanced etching. Together, these terms describe the deposition of polymer material on the surface, which acts as passivation layer for the chemical etching process. If, on the other hand, etching of the substrate dominates, the negative surface velocity of the substrate is given by \begin{equation} v=\frac{1}{\rho_{m}}\left[J_{e v} \phi_{e}+J_{i} Y_{ie} \phi_{e}+J_{i} Y_{sp}\left(1-\phi_{e}\right)\right], \end{equation} where $\rho_m$ is the atomic density of the etched material and depends on which layer in the stack is being etched. Each term accounts for a different type of surface reaction. The first term, $J_{e v} \phi_{e}$, describes the chemical etching process, where etchants bind chemically with the substrate to form volatile etch products which dissolve thermally from the surface. Thus, the evaporation flux $J_{ev}$ is a parameter proportional to the etchant flux $J_e$ and depends on the chemical gas and surface composition and temperature of the etching plasma. It is given by \begin{equation} J_{ev} = K e^{-E_a/k_B T}J_e, \end{equation} where $K$ is a process parameter describing the volatility of the chemical etching process, $E_a$ is the activation energy for thermal etching, $k_B$ is the Boltzmann constant, and $T$ is the temperature. The second term, $J_{i} Y_{ie} \phi_{e}$, describes the contribution of ion-enhanced etching. In this surface reaction, volatile etch products which do not dissolve from the surface thermally, absorb energy from impinging ions and consequently dissolve from the surface. Finally, the last term, $J_{i} Y_{sp}\left(1-\phi_{e}\right)$, describes physical sputtering of the substrate by highly energetic ions. Since both chemical and ion-enhanced etching involve etchants, they are proportional to the etchant coverage $\phi_e$, while physical ion sputtering takes place directly on the substrate and is thus proportional to the fraction of the surface not covered by the etchant.

      Ions

      Each ion is endowed with an initial energy and direction upon creation on the source plane. The assignment of initial energies is governed by a normal distribution, characterized by a mean energy value and an energy sigma, thus allowing for stochastic variations in the initial energy states of the ions. The distribution of initial ion directions is given by a power cosine source distribution, which is defined by the exponent of the power cosine distribution.

      Upon impact with the surface, an energy- and angle-dependent yield is computed, which contributes to the specific surface point’s rate. The yield is expressed as: \begin{equation} Y(E,\theta) = A\left(\sqrt{E} - \sqrt{E_{th}}\right)f(\theta), \end{equation} where $E$ denotes the particle energy and $\theta$ its incident angle. Here, $A$ represents a yield coefficient, and $E_{\text{th}}$ denotes the material’s threshold energy for physical sputtering. The function $f(\theta)$, which characterizes the angle-dependence of the yield. For sputtering, the function is given by: \begin{equation} f(\theta) = (1 + B_{sp}(1-\cos^2(\theta)))\cos(\theta), \end{equation} while for ion-enhanced etching, the function is given by: \begin{equation} f(\theta) = \cos(\theta). \end{equation}

      The ions can also reflect from the surface. Their energy loss during reflection is described by the model proposed by Belen et al [^1]. The current ray energy is multiplied by a factor $E_\textrm{ref}$ ($0 \leq E_\textrm{ref} \leq 1$) which depends on the incoming angle $\theta$ in the following way: \begin{equation} E_{\textrm{ref}}= 1-(1-A)\frac{\frac{\pi}{2}-\theta}{\frac{\pi}{2}-\theta_\textrm{inflect}} \quad \text{ if } \theta \geqslant \theta_\textrm{inflect} \end{equation} \begin{equation} E_{\textrm{ref}}=\mathrm{A}\left(\frac{\theta}{\theta_\textrm{inflect}}\right)^{n_l} \quad \text{ if } \theta<\theta_\textrm{inflect}, \end{equation} where $A = (1 + n(\frac{\pi}{2 \theta_\textrm{inflect}} - 1))^{-1}$.

      Ions striking the surface at an angle denoted by $\theta$ relative to the surface normal undergo reflection, where the angular dispersion is characterized by a cosine function centered around the direction of specular reflection defined by $\theta_\textrm{spec}$. This reflection process distinguishes between ions approaching the surface at glancing angles, which undergo nearly perfect specular reflection, and those striking the surface perpendicularly, which undergo nearly diffuse reflection.

      \begin{equation} \mathrm{P}(\phi) \propto \cos \left(\frac{\pi}{2} \frac{\phi}{\frac{\pi}{2}-\theta_\textrm{spec}}\right) \quad \text{ if } \theta_\textrm{inc} \leqslant \theta_\textrm{min} \end{equation}

      \begin{equation} \mathrm{P}(\phi) \propto \cos \left(\frac{\pi}{2} \frac{\phi}{\frac{\pi}{2}-\theta_\textrm{min}}\right) \quad \text{ if } \theta_{\textrm{inc}}>\theta_{\textrm{min}} \end{equation}

      The ray’s reflected direction is randomly chosen from a cone around the specular direction. The opening angle of this cone is given by the incidence angle $\theta$.

      drawing

      Implementation

      The fluorocarbon etching process is implemented in the psFluorocarbonEtching class. To customize the parameters of the process, it is advised to create a new instance of the class and set the desired parameters in the parameter struct. The following example demonstrates how to create a new instance of the class and set the parameters of the process.

      Time and length units have to be set before initializing the model. For details see Units.

      C++

      // namespace viennaps
       ...
       auto model = SmartPointer<FluorocarbonEtching<NumericType, D>>::New();
      diff --git a/docs/_site/models/prebuilt/index.html b/docs/_site/models/prebuilt/index.html
      index 728bb52f..0d4402f8 100644
      --- a/docs/_site/models/prebuilt/index.html
      +++ b/docs/_site/models/prebuilt/index.html
      @@ -1 +1 @@
      -             Pre-Built Models | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied          
      +             Pre-Built Models | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied          
      diff --git a/docs/_site/models/prebuilt/isotropic.html b/docs/_site/models/prebuilt/isotropic.html
      index a0f1af4a..c9fce0ea 100644
      --- a/docs/_site/models/prebuilt/isotropic.html
      +++ b/docs/_site/models/prebuilt/isotropic.html
      @@ -1,4 +1,4 @@
      -             Isotropic Process | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Isotropic Process

      #include <psIsotropicProcess.hpp>
      +             Isotropic Process | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Isotropic Process

      #include <psIsotropicProcess.hpp>
       

      An isotropic etching or deposition process initiates across all materials in the domain, excluding the masking material, which is by default set to Material::None. The default setting means, that the process unfolds uniformly across all materials within the domain. When the rate is less than 0, the material undergoes etching. Conversely, when the rate exceeds 0, material deposition occurs in accordance with the material of the top level set. If you want to deposit a new material, make sure to call the function duplicateTopLevelSet in your domain instance.

      psIsotropicProcess(const NumericType rate,
                          const Material maskMaterial = Material::None)
       
      Parameter Description Type
      rate Rate of the process. NumericType
      maskMaterial Material that does not participate in the process. Material

      Deposition example:

      C++

      #include <psIsotropicProcess.hpp>
      diff --git a/docs/_site/models/prebuilt/multiParticle.html b/docs/_site/models/prebuilt/multiParticle.html
      index 6a980ecd..195f840f 100644
      --- a/docs/_site/models/prebuilt/multiParticle.html
      +++ b/docs/_site/models/prebuilt/multiParticle.html
      @@ -1,4 +1,4 @@
      -             Multi Particle Process | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Multi Particle Process

      #include <psMultiParticleProcess.hpp>
      +             Multi Particle Process | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Multi Particle Process

      #include <psMultiParticleProcess.hpp>
       

      The multi particle process is a simple process model that simulates either etching or deposition, where an arbitrary number of particles can be specified. The particles can be neutral or ions, and the model can be used to simulate a wide range of processes. The rate equation for combining the fluxes of the particles has to be provided by the user.

      Neutral Particles

      Neutral particles are characterized by their sticking probability, which quantifies the likelihood that a neutral particle will adhere to a surface upon impact. This probability ranges between 0 and 1, where:

      • A sticking probability of 1 indicates that the particle will always stick to the surface.
      • A sticking probability of 0 indicates that the particle will always be reflected.

      The sticking probability determines the reflection behavior of neutral particles and can be defined specifically for each material within the domain.

      Ion Particles

      Ion particles are defined by their source exponent, which is the exponent of the power cosine distribution for the initial directions of the ions. The source exponent defines the distribution of the initial directions of the ions. A source exponent of 1 means that the ions are emitted isotropically, while a source exponent of 1000 means that the ions are emitted mostly perpendicular to the surface.

      The ion sticking function is defined by the parameters $\theta_{min}$ and $\theta_{max}$. The ion sticking function is a function of the incoming angle $\theta$ that defines the probability that an ion will stick to the surface upon impact. The ion sticking function is a linear function defined as:

      \[S(\theta) = \begin{cases} 0 & \text{if } \theta < \theta_{min} \\ 1 & \text{if } \theta > \theta_{max} \\ \frac{\theta - \theta_{min}}{\theta_{max} - \theta_{min}} & \text{otherwise} \end{cases}\]

      Ions striking the surface at an angle denoted by $\theta$ relative to the surface normal undergo reflection, where the angular dispersion is characterized by a cosine function centered around the direction of specular reflection defined by $\theta_\textrm{spec}$. This reflection process distinguishes between ions approaching the surface at glancing angles, which undergo nearly perfect specular reflection, and those striking the surface perpendicularly, which undergo nearly diffuse reflection. The ray’s reflected direction is randomly chosen from a cone around the specular direction. The opening angle of this cone is given by the incidence angle $\theta$ or the minimum specified angle $\theta_{min}$.

      drawing

      Optional Parameters:

      Ion can be assigned an energy which can be used to calculate a surface yield. This feature can be activated by setting the mean energy > 0 and is deactivated by setting the mean energy = 0. The energy distribution of the ions is assumed to be Gaussian with a standard deviation of sigmaEnergy. The threshold energy is the energy below which the ion will not sputter the surface, and the energy dependent yield is defined as:

      \[Y(E) = \begin{cases} 0 & \text{if } E < E_{\textrm{threshold}} \\ \sqrt{E} - \sqrt{E_{\textrm{threshold}}} & \text{if } E \geq E_{\textrm{threshold}} \end{cases}\]

      The inflection angle and n are parameters of the ion energy reduction function, which is used to calculate the energy after reflection. The ion energy reduction function is defined as:

      \[E_{\textrm{ref}}= \begin{cases} 1-(1-A)\frac{\frac{\pi}{2}-\theta}{\frac{\pi}{2}-\theta_\textrm{inflect}} & \text{ if } \theta \geqslant \theta_\textrm{inflect} \\ \mathrm{A}\left(\frac{\theta}{\theta_\textrm{inflect}}\right)^{n_l} & \text{ if } \theta<\theta_\textrm{inflect}, \end{cases}\]

      where $A = (1 + n(\frac{\pi}{2 \theta_\textrm{inflect}} - 1))^{-1}$.

      The angle-dependent sputtering yield is defined as:

      \begin{equation} Y(\theta) = (1 + B_{sp}(1-\cos^2(\theta)))\cos(\theta). \end{equation}

      Implementation

      
       // default empty constructor
       MultiParticleProcess()
      diff --git a/docs/_site/models/prebuilt/oxideRegrowth.html b/docs/_site/models/prebuilt/oxideRegrowth.html
      index 2bb16b30..634141a8 100644
      --- a/docs/_site/models/prebuilt/oxideRegrowth.html
      +++ b/docs/_site/models/prebuilt/oxideRegrowth.html
      @@ -1,2 +1,2 @@
      -             Oxide Regrowth | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Oxide Regrowth

      #include <psOxideRegrowth.hpp>
      +             Oxide Regrowth | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Oxide Regrowth

      #include <psOxideRegrowth.hpp>
       

      Modelling of oxide regrowth in during selective etching in stack of alternation SiO2 and Si3N4 layers. Based on the model presented here1.


      1. Tobias Reiter, Alexander Toifl, Andreas Hössinger, Lado Filipovic; Modeling Oxide Regrowth During Selective Etching in Vertical 3D NAND Structures. in: 2023 International Conference on Simulation of Semiconductor Processes and Devices (SISPAD) 2023, pp 85–88. https://doi.org/10.23919/SISPAD57422.2023.10319506 


      diff --git a/docs/_site/models/prebuilt/singleParticle.html b/docs/_site/models/prebuilt/singleParticle.html index 56b98e38..4f278e39 100644 --- a/docs/_site/models/prebuilt/singleParticle.html +++ b/docs/_site/models/prebuilt/singleParticle.html @@ -1,4 +1,4 @@ - Single Particle Process | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

      Single Particle Process

      #include <psSingleParticleProcess.hpp>
      +             Single Particle Process | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Single Particle Process

      #include <psSingleParticleProcess.hpp>
       

      The single particle process is a simple process model that simulates either etching or deposition, assuming a single particle species. The process is specified by the rate, the particle sticking coefficient, and the exponent in the power cosine distribution of the initial particle directions.

      The rate can be either negative or positive, corresponding to etching or deposition, respectively. The sticking coefficient is the probability that a particle will stick to the surface upon impact, thus controlling the number of diffusive reflections from the surface. The exponent in the power cosine distribution of the initial particle directions is a measure of the angular spread of the initial particle directions. A higher exponent corresponds to a more focused beam of particles.

      Additionally, mask materials can be specified, where the rate is assumed to be zero, or map between material and rate can be defined.

      Implementation

      SingleParticleProcess(const NumericType rate = 1.,
                             const NumericType stickingProbability = 1.,
                             const NumericType sourceDistributionPower = 1.,
      diff --git a/docs/_site/output/index.html b/docs/_site/output/index.html
      index 576ec2fb..45a8a3dc 100644
      --- a/docs/_site/output/index.html
      +++ b/docs/_site/output/index.html
      @@ -1 +1 @@
      -             Geometry Output | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Geometry Output


      ViennaPS provides various methods for outputting the surface or volume of the processed domain. The data is typically saved in the VTK file format, with surfaces stored in .vtp files and volumes in .vtu files. For visualization, we recommend using ParaView, a powerful open-source visualization tool. Below, you’ll find further details on the available geometry outputs.

      In addition to VTK file formats, ViennaPS provides the flexibility to store level sets directly in the proprietary .lvst format. This feature enables users to save intermediate states during the process, allowing for more detailed analysis and the ability to revisit specific simulation stages.


      Table of contents


      + Geometry Output | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

      Geometry Output


      ViennaPS provides various methods for outputting the surface or volume of the processed domain. The data is typically saved in the VTK file format, with surfaces stored in .vtp files and volumes in .vtu files. For visualization, we recommend using ParaView, a powerful open-source visualization tool. Below, you’ll find further details on the available geometry outputs.

      In addition to VTK file formats, ViennaPS provides the flexibility to store level sets directly in the proprietary .lvst format. This feature enables users to save intermediate states during the process, allowing for more detailed analysis and the ability to revisit specific simulation stages.


      Table of contents


      diff --git a/docs/_site/output/levelset.html b/docs/_site/output/levelset.html index 24745209..a18cbda0 100644 --- a/docs/_site/output/levelset.html +++ b/docs/_site/output/levelset.html @@ -1,4 +1,4 @@ - Level Set | ViennaPS Documentation Skip to main content Link Menu Expand (external link) Document Search Copy Copied

      Level Set


      Saving the Domain

      Documentation Coming soon

      Visualization

      ViennaPS provides a feature enabling users to save the level set grid points explicitly for each material layer within the domain in the VTK file format. This export includes the level set value associated with each grid point. Users also have the option to specify a width parameter, determining the number of grid points around the zero level set. This functionality enhances the ability to analyze and visualize the level set information in a detailed and customizable manner.

      Example usage:

      C++

      auto domain = ps::SmartPointer<ps::Domain<NumericType, D>>::New();
      +             Level Set | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Level Set


      Saving the Domain

      Documentation Coming soon

      Visualization

      ViennaPS provides a feature enabling users to save the level set grid points explicitly for each material layer within the domain in the VTK file format. This export includes the level set value associated with each grid point. Users also have the option to specify a width parameter, determining the number of grid points around the zero level set. This functionality enhances the ability to analyze and visualize the level set information in a detailed and customizable manner.

      Example usage:

      C++

      auto domain = ps::SmartPointer<ps::Domain<NumericType, D>>::New();
       ...
       // create geometry in domain
       ...
      diff --git a/docs/_site/output/surface.html b/docs/_site/output/surface.html
      index d0d662eb..1180794f 100644
      --- a/docs/_site/output/surface.html
      +++ b/docs/_site/output/surface.html
      @@ -1,4 +1,4 @@
      -             Surface Mesh | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Surface Mesh


      To save a triangulated mesh of the geometry surface, users can use the domain member function saveSurfaceMesh. The surface mesh also contains material information is the optional parameter addMaterialIds is set to true.

      Example usage:

      C++

      auto domain = ps::SmartPointer<ps::Domain<NumericType, D>>::New();
      +             Surface Mesh | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Surface Mesh


      To save a triangulated mesh of the geometry surface, users can use the domain member function saveSurfaceMesh. The surface mesh also contains material information is the optional parameter addMaterialIds is set to true.

      Example usage:

      C++

      auto domain = ps::SmartPointer<ps::Domain<NumericType, D>>::New();
       ...
       // create geometry in domain
       ...
      diff --git a/docs/_site/output/volume.html b/docs/_site/output/volume.html
      index 48dcb16d..55aa92ad 100644
      --- a/docs/_site/output/volume.html
      +++ b/docs/_site/output/volume.html
      @@ -1,4 +1,4 @@
      -             Volume Mesh | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Volume Mesh


      Volume meshes can be saved using the domain member function saveVolumeMesh. The mesh is solely for visualization purposes and can not be used for further simulations.

      Example usage:

      C++

      auto domain = ps::SmartPointer<ps::Domain<NumericType, D>>::New();
      +             Volume Mesh | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Volume Mesh


      Volume meshes can be saved using the domain member function saveVolumeMesh. The mesh is solely for visualization purposes and can not be used for further simulations.

      Example usage:

      C++

      auto domain = ps::SmartPointer<ps::Domain<NumericType, D>>::New();
       ...
       // create geometry in domain
       ...
      diff --git a/docs/_site/process/index.html b/docs/_site/process/index.html
      index 3fac66f6..9764d0de 100644
      --- a/docs/_site/process/index.html
      +++ b/docs/_site/process/index.html
      @@ -1,12 +1,10 @@
      -             Running a Process | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Running a Process

      #include <psProcess.hpp>
      +             Running a Process | ViennaPS Documentation                Skip to main content   Link      Menu      Expand       (external link)    Document      Search       Copy       Copied        

      Running a Process

      #include <psProcess.hpp>
       

      The Process class functions as the primary simulation interface, consolidating crucial elements such as the simulation domain, process model, process duration, and requisite ray-tracing parameters. This interface also contains the necessary methods for configuring these attributes. Upon setting these parameters, the apply() method is employed to execute the process,.

      Example usage:

      C++

      // namespace viennaps
       ...
       Process<NumericType, D> process;
       process.setDomain(myDomain);
       process.setProcessModel(myModel);
       process.setProcessDuration(10.);
      -process.setNumberOfRaysPerPoint(1000);
      -process.enableFluxSmoothing();
       process.apply();
       ...
       

      Python

      ...
      @@ -14,8 +12,6 @@
       process.setDomain(myDomain)
       process.setProcessModel(myModel)
       process.setProcessDuration(10.)
      -process.setNumberOfRaysPerPoint(1000)
      -process.enableFluxSmoothing()
       process.apply()
       ...
       

      Process Parameters

      Advanced process parameters, as described in this section are available from version 3.3.0

      Expert users can set specific parameter for the Level-Set integration and Ray Tracing flux calculation steps using the advanced parameters structs AdvectionParameters and RayTracingParameters. These parameter structs contain:

      AdvectionParameters:

      Parameter Type Default Value Description
      integrationScheme IntegrationSchemeEnum ENGQUIST_OSHER_1ST_ORDER Integration scheme used for advection. For options see here.
      timeStepRatio NumericType 0.4999 Ratio controlling the time step specified by the CFL condition. More details
      dissipationAlpha NumericType 1.0 Factor controlling dissipation in Lax-Friedrichs type integration schemes.
      velocityOutput bool false Whether to output velocity data for each advection step.
      ignoreVoids bool false Whether to ignore void regions.

      RayTracingParameters:

      Parameter Type Default Value Description
      sourceDirection TraceDirection POS_Z (if D == 3), POS_Y (otherwise) Direction of the ray source.
      normalizationType NormalizationType SOURCE Type of normalization used. Other option MAX.
      raysPerPoint unsigned 1000 Number of rays to trace per point in the geometry.
      diskRadius NumericType 0 Radius of the disks in the ray tracing geometry. If this value is 0 the default disk radius is used, which is the minimum radius such that there are no holes in the geometry.
      useRandomSeeds bool true Whether to use random seeds.
      ignoreFluxBoundaries bool false Whether to ignore boundary condtions during ray tracing.
      smoothingNeighbors int 1 Number of neighboring points used for smoothing the flux after ray tracing.

      Example usage:

      C++

      // namespace viennaps
      @@ -64,9 +60,13 @@
       

      Sets the process domain.


      Set the process model

      void setProcessModel(SmartPointer<ProcessModel<NumericType, D>> passedProcessModel)
       

      Sets the process model. This can be either a pre-configured process model or a custom process model.


      Set the source direction

      void setSourceDirection(const viennaray::TraceDirection passedDirection)
       

      Set the source direction, where the rays should be traced from. The passed direction parameter is using the enum viennaray::TraceDirection which contains the following values: POS_X, NEG_X, POS_Y, NEG_Y, POS_Z, NEG_Z.


      Set the process duration

      void setProcessDuration(NumericType passedDuration)
      -

      Specifies the duration of the process. If the process duration is set to 0, exclusively the advection callback applyPreAdvect() is executed on the domain. This feature is particularly useful for applying only a volume model without engaging in further simulation steps.


      Set the number of rays to be traced

      void setNumberOfRaysPerPoint(unsigned raysPerPoint)
      -

      Specify the number of rays to be traced for each particle throughout the process. The total count of rays is the product of this number and the number of points in the process geometry.


      Set the number of coverage initialization iterations

      void setMaxCoverageInitIterations(unsigned numIter)
      -

      Set the number of iterations to initialize the coverages.


      Enable or disable flux smoothing

      void enableFluxSmoothing()
      +

      Specifies the duration of the process. If the process duration is set to 0, exclusively the advection callback applyPreAdvect() is executed on the domain. This feature is particularly useful for applying only a volume model without engaging in further simulation steps.


      Single-Pass Flux Calculation

      SmartPointer<viennals::Mesh<NumericType>> calculateFlux()
      +

      Calculate the flux(es) for the current process. This function returns a smart pointer to a viennals::Mesh<NumericType> object containing the disk mesh and flux data.


      Set the number of coverage initialization iterations

      void setMaxCoverageInitIterations(unsigned numIter)
      +

      Set the maximum number of iterations to initialize the coverages. If additionally the coverage delta threshold is set, the coverage initialization is considered converged if the coverage delta is below the threshold or the maximum number of iterations is reached.


      Set coverage delta threshold

      void setCoverageDeltaThreshold(NumericType threshold)
      +

      Set the threshold for the coverage delta metric to reach convergence. If the coverage delta is below this threshold, the coverage initialization is considered converged. During a process, if the coverage delta is higher than this threshold, the flux calculation is repeated.


      Set the advection parameters

      void setAdvectionParameters(const AdvectionParameters<NumericType>& passedAdvectionParameters)
      +

      Set the advection parameters for the level-set integration. The advection parameters are defined in the AdvectionParameters struct.


      Set the ray tracing parameters

      void setRayTracingParameters(const RayTracingParameters<NumericType, D>& passedRayTracingParameters)
      +

      Set the ray tracing parameters for the flux calculation. The ray tracing parameters are defined in the RayTracingParameters struct.


      The following functions are used to set parameters in the AdvectionParameters and RayTracingParameters structs. From version 3.3.0, it is recommended to use the setAdvectionParameters and setRayTracingParameters functions to set these parameters.


      Set the number of rays to be traced

      void setNumberOfRaysPerPoint(unsigned raysPerPoint)
      +

      Specify the number of rays to be traced for each particle throughout the process. The total count of rays is the product of this number and the number of points in the process geometry.


      Enable or disable flux smoothing

      void enableFluxSmoothing()
       void disableFluxSmoothing()
       

      Toggle the option to enable or disable flux smoothing. When flux smoothing is activated, the flux at each surface point, computed by the ray tracer, undergoes averaging across the neighboring surface points. Per default, flux smoothing is enabled.


      Enable or disable flux boundary conditions

      void enableFluxBoundaries()
       void disableFluxBoundaries()
      diff --git a/docs/domain/functions.md b/docs/domain/functions.md
      index fcad4e0c..56d8e615 100644
      --- a/docs/domain/functions.md
      +++ b/docs/domain/functions.md
      @@ -12,21 +12,31 @@ nav_order: 3
       
       ## Constructors
       ```c++
      +// namespace viennaps
       Domain()
      -Domain(SmartPointer passedDomain)
      -Domain(SmartPointer> passedLevelSet, bool generateCellSet = false, 
      -       const NumericType passedCellSetDepth = 0., const bool passedCellSetPosition = false)
      -Domain(lsDomainsType passedLevelSets, bool generateCellSet = false, 
      -       const NumericType passedCellSetDepth = 0., const bool passedCellSetPosition = false)
      +Domain(SmartPointer passedDomain) // deep copy contructor
      +Domain(SmartPointer> passedLevelSet)
      +Domain(std::vector> passedLevelSets)
      +
      +// Configure DomainSetup (v3.3.0) for basic geometry builders
      +Domain(NumericType gridDelta, NumericType xExtent,
      +       BoundaryType boundary = BoundaryType::REFLECTIVE_BOUNDARY) // 2D only
      +Domain(NumericType gridDelta, NumericType xExtent, NumericType yExtent = 0.0,
      +       BoundaryType boundary = BoundaryType::REFLECTIVE_BOUNDARY)
      +Domain(const Setup &setup)
       ```
       
       ## Member Functions
       
       ```c++
      +void setup(const Setup &setup) 
      +void setup(NumericType gridDelta, NumericType xExtent, NumericType yExtent = 0,
      +           BoundaryType boundary = BoundaryType::REFLECTIVE_BOUNDARY)
       void deepCopy(SmartPointer passedDomain)
      -void insertNextLevelSet(SmartPointer> passedLevelSet, bool wrapLowerLevelSet = true)
      -void insertNextLevelSetAsMaterial(SmartPointer> passedLevelSet, const Material material, 
      -                                  bool wrapLowerLevelSet = true)
      +void insertNextLevelSet(SmartPointer> passedLevelSet, 
      +                        bool wrapLowerLevelSet = true)
      +void insertNextLevelSetAsMaterial(SmartPointer> passedLevelSet, 
      +                                  const Material material, bool wrapLowerLevelSet = true)
       void duplicateTopLevelSet(const Material material = Material::None)
       void removeTopLevelSet()
       void removeLevelSet(unsigned int idx, bool removeWrapped = true)
      @@ -39,11 +49,15 @@ auto &getLevelSets() const
       auto &getMaterialMap() const
       auto &getCellSet() const
       auto &getGrid() const
      +auto getGridDelta() const
      +auto &getSetup()
       auto getBoundingBox() const
      +auto getBoundaryConditions() const
       void print() const
       void saveLevelSetMesh(std::string name, int width = 1)
       void saveSurfaceMesh(std::string name, bool addMaterialIds = true)
      -void saveVolumeMesh(std::string name)
      +void saveVolumeMesh(std::string name, double wrappingLayerEpsilon = 1e-2)
      +void saveHullMesh(std::string name, double wrappingLayerEpsilon = 1e-2)
       void saveLevelSets(std::string fileName) const
       void clear()
       ```
      diff --git a/docs/geo/basic/fin.md b/docs/geo/basic/fin.md
      index 6797c282..c4d5733f 100644
      --- a/docs/geo/basic/fin.md
      +++ b/docs/geo/basic/fin.md
      @@ -1,7 +1,7 @@
       ---
       layout: default
       title: Fin Geometry
      -parent: Basic Geometries
      +parent: Geometry Builders
       grand_parent: Creating a Geometry
       nav_order: 4
       ---
      @@ -10,7 +10,7 @@ nav_order: 4
       {: .fs-9 .fw-500 }
       
       ```c++
      -#include 
      +#include 
       ```
       ---
       
      @@ -18,6 +18,18 @@ The `MakeFin` class generates a fin geometry extending in the z (3D) or y (2D) d
       
       ```c++
       // namespace viennaps
      +
      +// with DomainSetup configured (v3.3.0)
      +MakeFin(DomainType domain,
      +        NumericType finWidth,
      +        NumericType finHeight,
      +        NumericType finTaperAngle,
      +        NumericType maskHeight = 0.,
      +        NumericType maskTaperAngle = 0.,
      +        bool halfFin = false,
      +        Material material = Material::Si,
      +        Material maskMaterial = Material::Mask)
      +
       MakeFin(DomainType domain,
               const NumericType gridDelta,
               const NumericType xExtent, 
      @@ -27,21 +39,31 @@ MakeFin(DomainType domain,
               const NumericType baseHeight = 0.,
               const bool periodicBoundary = false,
               const bool makeMask = false,
      -        const Material material = Material::None)
      +        const Material material = Material::Si)
       ```
       
      -| Parameter              | Description                                                         | Type                           |
      -|------------------------|---------------------------------------------------------------------|--------------------------------|
      -| `domain`               | Specifies the type of domain for the fin geometry.                 |  `SmartPointer` |
      -| `gridDelta`            | Represents the grid spacing or resolution used in the simulation.          | `NumericType`  |
      -| `xExtent`              | Defines the extent of the fin geometry in the x-direction.                           | `NumericType`  |
      -| `yExtent`              | Specifies the extent of the fin geometry in the y-direction.                            | `NumericType`  |
      -| `finWidth`             | Sets the width of the fin.                                              | `NumericType`  |
      -| `finHeight`            | Determines the height of the fin.                                          | `NumericType`  |
      -| `baseHeight`           | (Optional) Sets the base height of the fin. Default is set to 0.              | `NumericType`  |
      -| `periodicBoundary`     | (Optional) If set to true, enables periodic boundaries in both x and y directions. Default is set to false. | `bool` |
      -| `makeMask`             | (Optional) If set to true, allows the fin to function as a mask, with specified material applied only to the bottom. Default is set to false. | `bool`    |
      -| `material`             | (Optional) Specifies the material used for the fin. Default is set to `Material::None`.   |   `Material`   |
      +| Parameter           | Type           | Description  | Applicable Constructor |
      +|---------------------|---------------|--------------|------------------------|
      +| `domain`           | `psDomainType` | The simulation domain. | Both |
      +| `finWidth`         | `NumericType`  | Width of the fin. | Both |
      +| `finHeight`        | `NumericType`  | Height of the fin. | Both (ignored if `makeMask = true`) |
      +| `finTaperAngle`    | `NumericType`  | Taper angle of the fin (default: `0.`). | Both (ignored if `makeMask = true`) |
      +| `maskHeight`       | `NumericType`  | Height of the mask (default: `0.`). | First constructor only |
      +| `maskTaperAngle`   | `NumericType`  | Taper angle of the mask (default: `0.`). | First constructor only |
      +| `halfFin`          | `bool`         | If `true`, the fin is halved along the x-axis. | First constructor only |
      +| `material`         | `Material`     | Material of the fin (default: `Material::Si`). | Both |
      +| `maskMaterial`     | `Material`     | Material of the mask (default: `Material::Mask`). | First constructor only |
      +| `gridDelta`        | `NumericType`  | Grid spacing in the simulation domain. | Second constructor only |
      +| `xExtent`         | `NumericType`  | Extent of the domain in the x-direction. | Second constructor only |
      +| `yExtent`         | `NumericType`  | Extent of the domain in the y-direction. | Second constructor only |
      +| `taperAngle`      | `NumericType`  | Taper angle of the fin/mask. | Second constructor only |
      +| `baseHeight`      | `NumericType`  | Base height of the fin (default: `0.`). | Second constructor only |
      +| `periodicBoundary` | `bool`         | If `true`, enables periodic boundary conditions (default: `false`). | Second constructor only |
      +| `makeMask`        | `bool`         | If `true`, a mask is created instead of a fin (default: `false`). | Second constructor only |
      +
      +> **Note**:  
      +> - The first constructor **requires** that the domain is already configured and is only available from **ViennaPS v3.3.0**.  
      +> - The second constructor allows domain setup within the constructor by specifying `gridDelta`, `xExtent`, and `yExtent`.  
       
       __Example usage:__
       
      @@ -52,6 +74,11 @@ C++
       
       ```c++
       // namespace viennaps
      +// recomended with DomainSetup configured (v3.3.0)
      +auto domain = SmartPointer>::New(0.5, 10., 10., BoundaryType::REFLECTIVE_BOUNDARY);
      +MakeFin(domain, 2.5, 5.0, 10., 0., 0., false, Material::Si, Material::Mask).apply();
      +
      +// without DomainSetup
       auto domain = SmartPointer>::New();
       MakeFin(domain, 0.5, 10.0, 10.0, 5.0, 5.0, 0., false, false,
                               Material::Si)
      @@ -65,6 +92,20 @@ Python:
       {: .label .label-green }
       
       ```python
      +# with DomainSetup configured (v3.3.0)
      +domain = vps.Domain(0.5, 10., 10., vps.BoundaryType.REFLECTIVE_BOUNDARY)
      +vps.MakeFin(domain=domain,
      +            finWidth=2.5,
      +            finHeight=5.0,
      +            finTaperAngle=10.,
      +            maskHeight=5.,
      +            maskTaperAngle=0.,
      +            halfFin=False,
      +            material=vps.Material.Si,
      +            maskMaterial=vps.Material.Mask
      +           ).apply()
      +
      +# without DomainSetup
       domain = vps.Domain()
       vps.MakeFin(domain=domain,
                   gridDelta=0.5,
      diff --git a/docs/geo/basic/hole.md b/docs/geo/basic/hole.md
      index 47058fce..92e7d2c1 100644
      --- a/docs/geo/basic/hole.md
      +++ b/docs/geo/basic/hole.md
      @@ -1,7 +1,7 @@
       ---
       layout: default
       title: Hole Geometry
      -parent: Basic Geometries
      +parent: Geometry Builders
       grand_parent: Creating a Geometry
       nav_order: 3
       ---
      @@ -10,7 +10,7 @@ nav_order: 3
       {: .fs-9 .fw-500 }
       
       ```c++
      -#include  
      +#include  
       ```
       ---
       
      @@ -19,6 +19,18 @@ Additionally, the hole can serve as a mask, with the specified material only app
       
       ```c++
       // namespace viennaps
      +
      +// with DomainSetup configured (v3.3.0)
      +MakeHole(psDomainType domain, 
      +         NumericType holeRadius, 
      +         NumericType holeDepth,
      +         NumericType holeTaperAngle = 0., 
      +         NumericType maskHeight = 0.,
      +         NumericType maskTaperAngle = 0., 
      +         HoleShape shape = HoleShape::Full,
      +         Material material = Material::Si,
      +         Material maskMaterial = Material::Mask)
      +
       MakeHole(DomainType domain,
                NumericType gridDelta,
                NumericType xExtent, 
      @@ -29,24 +41,33 @@ MakeHole(DomainType domain,
                NumericType baseHeight = 0.,
                bool periodicBoundary = false,
                bool makeMask = false,
      -         Material material = Material::None,
      +         Material material = Material::Si,
                HoleShape holeShape = HoleShape::Full)
       ```
       
      -| Parameter              | Description                                                           | Type                           |
      -|------------------------|-----------------------------------------------------------------------|--------------------------------|
      -| `domain`               | Specifies the type of domain for the hole geometry.                |  `SmartPointer>`  |
      -| `gridDelta`            | Represents the grid spacing or resolution used in the simulation.                   | `NumericType`                  |
      -| `xExtent`              | Defines the extent of the hole geometry in the x-direction.                         | `NumericType`                  |
      -| `yExtent`              | Specifies the extent of the hole geometry in the y-direction.                  | `NumericType`                  |
      -| `holeRadius`           | Sets the radius of the hole.                                   | `NumericType`                  |
      -| `holeDepth`            | Determines the depth of the hole.                                       | `NumericType`                  |
      -| `taperAngle`           | (Optional) Specifies the angle of tapering for the hole geometry in degrees. Default is set to 0. | `NumericType`      |
      -| `baseHeight`           | (Optional) Sets the base height of the hole. Default is set to 0.             | `NumericType`                  |
      -| `periodicBoundary`     | (Optional) If set to true, enables periodic boundaries in both x and y directions. Default is set to false. | `bool`  |
      -| `makeMask`             | (Optional) If set to true, allows the hole to function as a mask, with specified material applied only to the bottom. Default is set to false. | `bool`  |
      -| `material`             | (Optional) Specifies the material used for the hole. Default is set to `Material::None`.    |   `Material`  |
      -| `holeShape`            | (Optional) Specifies whether a full, half or quarter hole should be created. Half and quarter holes with reflective boundary conditions can simulate the full dynamics of a hole with less computational cost. Default is set to `HoleShape::Full`. | `HoleShape` |
      +| Parameter          | Type           | Description  | Applicable Constructor |
      +|-------------------|---------------|--------------|------------------------|
      +| `domain`         | `psDomainType` | The simulation domain. | Both |
      +| `holeRadius`     | `NumericType`  | Radius of the hole. | Both |
      +| `holeDepth`      | `NumericType`  | Depth of the hole. | Both |
      +| `holeTaperAngle` | `NumericType`  | Taper angle of the hole (default: `0.`). | Both |
      +| `maskHeight`     | `NumericType`  | Height of the masking layer (default: `0.`). | First constructor only |
      +| `maskTaperAngle` | `NumericType`  | Taper angle of the masking layer (default: `0.`). | First constructor only |
      +| `shape`          | `HoleShape`    | Shape of the hole (default: `HoleShape::Full`). | Both |
      +| `material`       | `Material`     | Material of the hole (default: `Material::Si`). | Both |
      +| `maskMaterial`   | `Material`     | Material of the mask (default: `Material::Mask`). | First constructor only |
      +| `gridDelta`      | `NumericType`  | Grid spacing in the simulation domain. | Second constructor only |
      +| `xExtent`        | `NumericType`  | Extent of the domain in the x-direction. | Second constructor only |
      +| `yExtent`        | `NumericType`  | Extent of the domain in the y-direction. | Second constructor only |
      +| `taperAngle`     | `NumericType`  | Alternative name for `holeTaperAngle` in the second constructor (default: `0.`). | Second constructor only |
      +| `baseHeight`     | `NumericType`  | Height at which the hole starts (default: `0.`). | Second constructor only |
      +| `periodicBoundary` | `bool`       | If `true`, enables periodic boundary conditions (default: `false`). | Second constructor only |
      +| `makeMask`       | `bool`         | If `true`, the mask is created instead of the hole, setting `holeDepth` to `0` (default: `false`). | Second constructor only |
      +
      +> **Note**:  
      +> - The first constructor requires that the domain is already configured.  
      +> - The second constructor sets up a new simulation domain with `gridDelta`, `xExtent`, and `yExtent`.  
      +> - If `makeMask` is `true`, the hole is not created, and only the masking layer is applied.  
       
       __Example usage:__
       
      @@ -57,6 +78,13 @@ C++
       
       ```c++
       // namespace viennaps
      +
      +// with DomainSetup configured (v3.3.0)
      +auto domain = SmartPointer>::New(0.5, 10., 10., BoundaryType::REFLECTIVE_BOUNDARY);
      +MakeHole(domain, 5.0, 5.0, 10., 0., 0., HoleShape::Quarter, Material::Si, Material::Mask)
      +    .apply();
      +
      +// without DomainSetup
       auto domain = SmartPointer>::New();
       MakeHole(domain, 0.5, 10.0, 10.0, 2.5, 5.0, 10., 0., false,
                                false, Material::Si)
      @@ -70,6 +98,22 @@ Python
       {: .label .label-green }
       
       ```python
      +# with DomainSetup configured (v3.3.0)
      +domain = vps.Domain(gridDelta=0.5, 
      +                    xExtent=10.0, 
      +                    yExtent=10.0, 
      +                    boundaryType=vps.BoundaryType.REFLECTIVE_BOUNDARY)
      +vps.MakeHole(domain=domain,
      +             holeRadius=5.0,
      +             holeDepth=0.0,
      +             holeTaperAngle=0.0,
      +             maskHeight=5.0,
      +             maskTaperAngle=2.0,
      +             shape=vps.HoleShape.Quarter,
      +             material=vps.Material.Si,
      +             maskMaterial=vps.Material.Mask
      +            ).apply()
      +
       domain = vps.Domain()
       vps.MakeHole(domain=domain,
                     gridDelta=0.5,
      diff --git a/docs/geo/basic/index.md b/docs/geo/basic/index.md
      index 79ab24f4..c6647580 100644
      --- a/docs/geo/basic/index.md
      +++ b/docs/geo/basic/index.md
      @@ -1,12 +1,12 @@
       ---
       layout: default
      -title: Basic Geometries
      +title: Geometry Builders
       parent: Creating a Geometry
       nav_order: 0
       has_children: true
       ---
       
      -# Basic Geometries 
      +# Basic Geometry Builders
       {: .fs-9 .fw-500 }
       
       ---
      diff --git a/docs/geo/basic/plane.md b/docs/geo/basic/plane.md
      index 3a049c17..7d6b344c 100644
      --- a/docs/geo/basic/plane.md
      +++ b/docs/geo/basic/plane.md
      @@ -1,7 +1,7 @@
       ---
       layout: default
       title: Plane Geometry
      -parent: Basic Geometries
      +parent: Geometry Builders
       grand_parent: Creating a Geometry
       nav_order: 1
       ---
      @@ -10,7 +10,7 @@ nav_order: 1
       {: .fs-9 .fw-500 }
       
       ```c++
      -#include 
      +#include 
       ```
       
       ---
      @@ -19,32 +19,37 @@ The `MakePlane` class offers a straightforward approach to generate a plane as a
       
       ```c++
       // namespace viennaps
      -// New geometry
      -MakePlane(DomainType domain, 
      -         const NumericType gridDelta,
      -         const NumericType xExtent, 
      -         const NumericType yExtent,
      -         const NumericType height, 
      -         const bool periodicBoundary = false,
      -         const Material material = Material::None)
      -
      -// Add to existing geometry
      -MakePlane(DomainType domain, NumericType height = 0.,
      -          const Material material = Material::None)
      +MakePlane(psDomainType domain, 
      +          NumericType baseHeight = 0.,
      +          Material material = Material::Si, 
      +          bool addToExisting = false)
      +
      +MakePlane(psDomainType domain, 
      +          NumericType gridDelta, 
      +          NumericType xExtent,
      +          NumericType yExtent, 
      +          NumericType baseHeight,
      +          bool periodicBoundary = false, 
      +          Material material = Material::Si)
      +      
       ```
       
       Depending on the specific constructor invoked for the plane-builder, the behavior varies: the domain may be cleared, and a new plane inserted, or the plane can be added to the existing geometry in the domain. A detailed description of the parameters follows:
       
      -| Parameter    | Description                                      | Type |
      -|:-------------|:-------------------------------------------------|:-------------------------------------------|
      -| `domain`       | The `Domain` object passed in a smart pointer. | `SmartPointer>` |
      -| `gridDelta`    | Represents the grid spacing or resolution used in the simulation.   | `NumericType`  |
      -| `xExtent`           | Defines the extent of the plane geometry in the _x_-direction.     | `NumericType`   |
      -| `yExtent`           | Defines the extent of the plane geometry in the _y_-direction. | `NumericType`  |
      -| `height`      | Sets the position of the plane in y(2D)/z(3D) direction. | `NumericType` |
      -| `periodicBoundary` | (Optional) If set to true, enables periodic boundaries in both x and y directions. Default is set to false. | `bool` |
      -| `material` | (Optional) Specifies the material used for the plane. Default is set to `Material::None`. | `Material` |
      -
      +| Parameter           | Type           | Description  | Applicable Constructor |
      +|---------------------|---------------|--------------|------------------------|
      +| `domain`           | `psDomainType` | The simulation domain. | Both |
      +| `baseHeight`       | `NumericType`  | Height at which the plane is placed (default: `0.`). | Both |
      +| `material`         | `Material`     | Material of the plane (default: `Material::Si`). | Both |
      +| `addToExisting`    | `bool`         | If `true`, the plane is added to an existing geometry instead of creating a new one (default: `false`). | First constructor only |
      +| `gridDelta`        | `NumericType`  | Grid spacing in the simulation domain. | Second constructor only |
      +| `xExtent`         | `NumericType`  | Extent of the domain in the x-direction. | Second constructor only |
      +| `yExtent`         | `NumericType`  | Extent of the domain in the y-direction. | Second constructor only |
      +| `periodicBoundary` | `bool`         | If `true`, enables periodic boundary conditions (default: `false`). | Second constructor only |
      +
      +> **Note**:  
      +> - The first constructor **requires** that the domain is already configured and allows adding a plane to an existing geometry.  
      +> - The second constructor creates a new geometry and sets up the domain using `gridDelta`, `xExtent`, and `yExtent`.  
       
       __Example usage__:
       
      @@ -57,9 +62,8 @@ C++
       
       ```c++
       // namespace viennaps
      -auto domain = SmartPointer>::New();
      -MakePlane(domain, 0.5, 10.0, 10.0, 0.0, false,
      -                          Material::Si).apply();
      +auto domain = SmartPointer>::New(0.5, 10., 10., BoundaryType::REFLECTIVE_BOUNDARY);
      +MakePlane(domain, 0.0, Material::Si).apply();
       ```
       
      @@ -69,13 +73,9 @@ Python {: .label .label-green } ```python -domain = vps.Domain() +domain = vps.Domain(gridDelta=0.5, xExtent=10.0, yExtent=10.0, boundaryType=vps.BoundaryType.REFLECTIVE_BOUNDARY) vps.MakePlane(domain=domain, - gridDelta=0.5, - xExtent=10.0, - yExtent=10.0, - height=0.0, - periodicBoundary=False, + baseHeight=0.0, material=vps.Material.Si, ).apply() ``` @@ -89,8 +89,7 @@ C++ {: .label .label-blue } ```c++ -auto domain = SmartPointer>::New(); -psMakePlane(domain, 10.0, Material::Si).apply(); +MakePlane(domain, 10.0, Material::Si, true).apply(); ```
      @@ -100,10 +99,10 @@ Python {: .label .label-green } ```python -domain = vps.Domain() vps.MakePlane(domain=domain, height=0.0, material=vps.Material.Si, + addToExisting=True ).apply() ```
      \ No newline at end of file diff --git a/docs/geo/basic/stack.md b/docs/geo/basic/stack.md index 34413103..6ca8bee9 100644 --- a/docs/geo/basic/stack.md +++ b/docs/geo/basic/stack.md @@ -1,7 +1,7 @@ --- layout: default title: Stack Geometry -parent: Basic Geometries +parent: Geometry Builders grand_parent: Creating a Geometry nav_order: 5 --- @@ -10,7 +10,7 @@ nav_order: 5 {: .fs-9 .fw-500 } ```c++ -#include +#include ``` --- @@ -18,17 +18,29 @@ The `MakeStack` generates a stack of alternating SiO2/Si3N ```c++ // namespace viennaps +// with DomainSetup configured (v3.3.0) +MakeStack(psDomainType domain, + int numLayers, + NumericType layerHeight, + NumericType substrateHeight, + NumericType holeRadius, + NumericType trenchWidth, + NumericType maskHeight, + NumericType taperAngle, + bool halfStack = false, + Material maskMaterial = Material::Mask) + MakeStack(DomainType domain, - const NumericType gridDelta, - const NumericType xExtent, - const NumericType yExtent, - const int numLayers, - const NumericType layerHeight, - const NumericType substrateHeight, - const NumericType holeRadius, - const NumericType trenchWidth, - const NumericType maskHeight, - const bool periodicBoundary = false) + NumericType gridDelta, + NumericType xExtent, + NumericType yExtent, + int numLayers, + NumericType layerHeight, + NumericType substrateHeight, + NumericType holeRadius, + NumericType trenchWidth, + NumericType maskHeight, + bool periodicBoundary = false) ``` | Parameter | Description | Type | diff --git a/docs/geo/basic/trench.md b/docs/geo/basic/trench.md index 48e3398f..56ed6b16 100644 --- a/docs/geo/basic/trench.md +++ b/docs/geo/basic/trench.md @@ -1,7 +1,7 @@ --- layout: default title: Trench Geometry -parent: Basic Geometries +parent: Geometry Builders grand_parent: Creating a Geometry nav_order: 2 --- @@ -10,7 +10,7 @@ nav_order: 2 {: .fs-9 .fw-500 } ```c++ -#include +#include ``` --- @@ -24,17 +24,29 @@ mask material. ```c++ // namespace viennaps +// with DomainSetup configured (v3.3.0) +MakeTrench(psDomainType domain, + NumericType trenchWidth, + NumericType trenchDepth, + NumericType trenchTaperAngle = 0, + NumericType maskHeight = 0, + NumericType maskTaperAngle = 0, + bool halfTrench = false, + Material material = Material::Si, + Material maskMaterial = Material::Mask) + + MakeTrench(DomainType domain, - const NumericType gridDelta, - const NumericType xExtent, - const NumericType yExtent, - const NumericType trenchWidth, - const NumericType trenchDepth, - const NumericType taperingAngle = 0., // in degrees - const NumericType baseHeight = 0., - const bool periodicBoundary = false, - const bool makeMask = false, - const Material material = Material::None) + NumericType gridDelta, + NumericType xExtent, + NumericType yExtent, + NumericType trenchWidth, + NumericType trenchDepth, + NumericType taperingAngle = 0., // in degrees + NumericType baseHeight = 0., + bool periodicBoundary = false, + bool makeMask = false, + Material material = Material::Si) ``` | Parameter | Description | Type | diff --git a/docs/geo/custom.md b/docs/geo/custom.md index 46db7e98..01e3dade 100644 --- a/docs/geo/custom.md +++ b/docs/geo/custom.md @@ -12,9 +12,3 @@ nav_order: 1 ViennaPS offers the capability to create custom geometries using tools from the ViennaLS library. The [`viennals::MakeGeometry`](https://viennatools.github.io/ViennaLS/classviennals_1_1MakeGeometry.html) function provides functionality for constructing basic geometric shapes like boxes, spheres, or cylinders. Moreover, shapes can be formed by creating a convex hull over a point cloud or by explicitly defining points and elements of a structure. Subsequently, boolean operations such as union, intersect, and relative complement can be applied to merge these basic shapes into a customized geometry. This flexible approach enables users to create complex geometries tailored to their specific simulation requirements. -Some examples are provided below: - -__Examples:__ - -Coming soon -{: .label .label-yellow} \ No newline at end of file diff --git a/docs/geo/index.md b/docs/geo/index.md index 7a110fab..86b0853f 100644 --- a/docs/geo/index.md +++ b/docs/geo/index.md @@ -10,4 +10,4 @@ has_children: true --- -Create intricate geometries using the versatile tools offered by ViennaLS or generate a basic geometry using of the provided geometry builders. Alternatively, you can import a geometry from a GDSII mask file. \ No newline at end of file +Create custom geometries using the versatile tools offered by ViennaLS or generate a basic geometry (plane, hole, trench, fin, stack) using one of the provided geometry builders. Alternatively, you can import a geometry from a GDSII mask file. \ No newline at end of file diff --git a/docs/models/prebuilt/SF6O2Etching.md b/docs/models/prebuilt/SF6O2Etching.md index 8d267d3c..62a1c160 100644 --- a/docs/models/prebuilt/SF6O2Etching.md +++ b/docs/models/prebuilt/SF6O2Etching.md @@ -39,16 +39,16 @@ Lastly, ion-enhanced etching, also known as reactive ion etching (RIE), combines The surface can be covered in fluorine or oxygen. The physical model keeps track of these coverages, given by $\theta_F$ and $\theta_O$, respectively, by calculating the flux-induced rates and considering the coverages from the previous time step. They are calculated with Langmuir–Hinshelwood-type surface site balance equations, given by: \begin{equation} - \sigma_{Si}\cfrac{d\theta_{F}}{dt}=\gamma_{F}\Gamma_{F}\left(1-\theta_{F}-\theta_{O}\right)-k\sigma_{Si}\theta_{F}-2Y_{ie}\Gamma_{i}\theta_{F} + \sigma_{Si}\cfrac{d\theta_{F}}{dt}=\beta_{F}\Gamma_{F}\left(1-\theta_{F}-\theta_{O}\right)-k\sigma_{Si}\theta_{F}-2Y_{ie}\Gamma_{i}\theta_{F} \label{equ:thetaF} \end{equation} \begin{equation} - \sigma_{Si}\cfrac{d\theta_{O}}{dt}=\gamma_{O}\Gamma_{O}\left(1-\theta_{F}-\theta_{O}\right)-\beta\sigma_{Si}\theta_{O}-Y_{O}\Gamma_{i}\theta_{O} + \sigma_{Si}\cfrac{d\theta_{O}}{dt}=\beta_{O}\Gamma_{O}\left(1-\theta_{F}-\theta_{O}\right)-\beta\sigma_{Si}\theta_{O}-Y_{O}\Gamma_{i}\theta_{O} \label{equ:thetaO} \end{equation} -The term $\sigma_{Si}$ represents the density of silicon at the surface point $\vec{x}$ which is not included in the equations for legibility; $\Gamma_F$, $\Gamma_O$, and $\Gamma_i$ are the emitted fluorine, oxygen, and ion fluxes, respectively; $\gamma_F$ and $\gamma_O$ are the sticking coefficients for fluorine and oxygen on a non-covered silicon substrate, respectively; $k$ is the chemical etch reaction rate constant; $\beta$ is the oxygen recombination rate constant; and $Y_{ie}$ and $Y_O$ are the total ion-enhanced and oxygen etching yields, respectively. $Y_{ie}$ and $Y_O$ are yield functions that are dependent on the ion energies in the reactor. +The term $\sigma_{Si}$ represents the density of silicon at the surface point $\vec{x}$ which is not included in the equations for legibility; $\Gamma_F$, $\Gamma_O$, and $\Gamma_i$ are the emitted fluorine, oxygen, and ion fluxes, respectively; $\beta_F$ and $\beta_O$ are the sticking coefficients for fluorine and oxygen on a non-covered silicon substrate, respectively; $k$ is the chemical etch reaction rate constant; $\beta$ is the oxygen recombination rate constant; and $Y_{ie}$ and $Y_O$ are the total ion-enhanced and oxygen etching yields, respectively. $Y_{ie}$ and $Y_O$ are yield functions that are dependent on the ion energies in the reactor. Since the surface movement is significantly smaller than the considered fluxes, it can be assumed that it does not impact the calculation. With this assumption of a pseudo-steady-state, the coverage equations can be set equal to zero, resulting in the following surface coverage equations: \begin{equation} @@ -107,9 +107,30 @@ The ray's reflected direction is randomly chosen from a cone around the specular drawing +The ions sticking probability is described by two parameters $\theta_\textrm{Rmin}$ and $\theta_\textrm{Rmax}$: +\begin{equation} + \beta_{ion} = 1 \quad \text{ if }\theta \leq \theta_\textrm{Rmin} +\end{equation} +\begin{equation} + \beta_{ion} = 1 - \frac{\theta - \theta_\textrm{Rmin}}{\theta_\textrm{Rmax}- \theta_\textrm{Rmin}} \quad \text{ if }\theta > \theta_\textrm{Rmin} +\end{equation} + +## Neutrals + +There are two neutral particle species in this model: __etchant__ (Flourine) and __oxygen__. The sticking probability is a function of the surface coverage and the sticking probability of the respective particle. The sticking probability is given by: +\begin{equation} + \beta_{eff_{F/O}} = \beta_{F/O} (1 - \theta_F - \theta_O) +\end{equation} +Neutrals reflect diffusely from the surface with a cosine distribution. + + ## Implementation +{: .note } +> Time and length units have to be set before initializing the model. For details see [Units]({% link misc/units.md %}). + ```c++ +SF6O2Etching() // use default values only SF6O2Etching(const double ionFlux, const double etchantFlux, const double oxygenFlux, const NumericType meanEnergy /* eV */, const NumericType sigmaEnergy /* eV */, @@ -117,57 +138,46 @@ SF6O2Etching(const double ionFlux, const double etchantFlux, const NumericType oxySputterYield = 2., const NumericType etchStopDepth = std::numeric_limits::lowest()) +SF6O2Etching(const SF6O2Parameters ¶meters) ``` -{: .note } -> Time and length units have to be set before initializing the model. For details see [Units]({% link misc/units.md %}). -| Parameter | Description | Type | -|----------------------|--------------------------------------------------------------------------|----------------| -| `ionFlux` | Ion flux for the {{ page.sf6o2 }} etching process. | `double` | -| `etchantFlux` | Etchant flux for the {{ page.sf6o2 }} etching process. | `double` | -| `oxygenFlux` | Oxygen flux for the {{ page.sf6o2 }} etching process. | `double` | -| `meanEnergy` | Mean energy of ions (eV). | `NumericType` | -| `sigmaEnergy` | Energy distribution standard deviation (eV). | `NumericType` | -| `ionExponent` | (Optional) Exponent in the power cosine source distribution of ions for initial directions. Default is set to 100. | `NumericType` | -| `oxySputterYield` | (Optional) Oxygen sputtering yield. Default is set to 2. | `NumericType` | -| `etchStopDepth` | (Optional) Depth at which etching should stop. Default is negative infinity.| `NumericType` | +Users can access and modify all detailed parameters by creating a `SF6O2Parameters` struct, which encapsulates the following values: {: .note} -> All flux values are units 1015 / cm2 /s2 . - -Alternatively, users can access and modify all detailed parameters by retrieving the parameter struct, which encapsulates the following values: +> All flux values are units 1015 / cm2 /s2. | Parameter | Description | Default Value | |---------------------|--------------------------------------------------------|------------------------| -| `ionFlux` | Ion flux (1015 /cm² /s) | 12.0 | -| `etchantFlux` | Etchant flux (1015 /cm² /s) | 1800.0 | -| `oxygenFlux` | Oxygen flux (1015 /cm² /s) | 100.0 | -| `etchStopDepth` | Depth at which etching stops | -inf | -| `beta_F` | Sticking probability for fluorine | 0.7 | -| `beta_O` | Sticking probability for oxygen | 1.0 | +| `ionFlux` | Ion flux | 12.0 | +| `etchantFlux` | Etchant flux | 1800.0 | +| `oxygenFlux` | Oxygen flux | 100.0 | +| `beta_F` | Sticking probability map for fluorine | 0.7 (on Si and Mask) | +| `beta_O` | Sticking probability map for oxygen | 1.0 (on Si and Mask) | +| `etchStopDepth` | Depth at which etching stops | -inf | +| `fluxIncludeSticking` | Include the effective sticking probability when accumlating fluxes, Required more iterations to reach coverage convergence | `false` | | `Mask.rho` | Mask density (1022 atoms/cm³) | 500.0 | -| `Mask.beta_F` | Mask sticking probability for fluorine | 0.01 | -| `Mask.beta_O` | Mask sticking probability for oxygen | 0.1 | | `Mask.Eth_sp` | Mask sputtering threshold energy (eV) | 20.0 | | `Mask.A_sp` | Mask sputtering coefficient | 0.0139 | | `Mask.B_sp` | Mask sputtering coefficient | 9.3 | | `Si.rho` | Silicon density (1022 atoms/cm³) | 5.02 | | `Si.Eth_sp` | Silicon sputtering threshold energy (eV) | 20.0 | -| `Si.Eth_ie` | Silicon ion enhanced etching threshold energy (eV) | 4.0 | +| `Si.Eth_ie` | Silicon ion enhanced etching threshold energy (eV) | 15.0 | | `Si.A_sp` | Silicon sputtering coefficient | 0.0337 | | `Si.B_sp` | Silicon sputtering coefficient | 9.3 | -| `Si.A_ie` | Silicon ion enhanced etching coefficient | 0.0361 | +| `Si.A_ie` | Silicon ion enhanced etching coefficient | 7.0 | | `Si.k_sigma` | Silicon chemical etch rate coefficient (1015 /cm² /s) | 300. | | `Si.beta_sigma` | Silicon oxygen recombination coefficient (1015 /cm² /s) | 0.05 | -| `Passivation.Eth_ie` | Passivation ion enhanced etching threshold energy (eV) | 4.0 | -| `Passivation.A_ie` | Passivation ion enhanced etching coefficient | 0.0361 | +| `Passivation.Eth_ie` | Passivation ion enhanced etching threshold energy (eV) | 10.0 | +| `Passivation.A_ie` | Passivation ion enhanced etching coefficient | 3.0 | | `Ions.meanEnergy` | Mean ion energy (eV) | 100.0 | | `Ions.sigmaEnergy` | Standard deviation of ion energy (eV) | 10.0 | | `Ions.exponent` | Exponent of power cosine source distribution of initial ion directions | 500.0 | | `Ions.inflectAngle` | Inflection angle (rad) | 1.55334303 | | `Ions.n_l` | Exponent of reflection power | 10.0 | | `Ions.minAngle` | Minimum cone angle for ion reflection | 1.3962634 | +| `Ions.thetaRMin` | Minimum angle for ion sticking probability | 70.0 (deg) | +| `Ions.thetaRMax` | Maximum angle for ion sticking probability | 90.0 (deg) | __Example usage:__ @@ -179,11 +189,11 @@ C++ ```c++ // namespace viennaps ... -auto model = SmartPointer>::New(); -auto ¶meters = model->getParameters(); -parameters.ionFlux = 10.; +SF6O2Parameters parameters; +parameters.ionFlux = 10.; parameters.Mask.rho = 500.; -// this modifies a direct reference of the parameters + +auto model = SmartPointer>::New(parameters); ... ```
      @@ -195,43 +205,15 @@ Python ```python ... -model = vps.SF6O2Etching() -parameters = model.getParameters() +parameters = vps.SF6O2Parameters() parameters.ionFlux = 10. parameters.Mask.rho = 500. -# this modifies a direct reference of the parameters + +model = vps.SF6O2Etching(parameters) ... ```
      -## SF6 Etching - -The SF6 etching model is a simplified version of the SF6O2 etching model. The model only considers the etching of silicon by fluorine ions. The model is based on the same principles as the SF6O2 etching model, but without the presence of oxygen. The model is implemented in the same way as the SF6O2 etching model, but with the following parameters: - -```c++ - -SF6Etching(const double ionFlux, const double etchantFlux, - const NumericType meanEnergy /* eV */, - const NumericType sigmaEnergy /* eV */, // 5 parameters - const NumericType ionExponent = 300., - const NumericType etchStopDepth = - std::numeric_limits::lowest()) -``` - -| Parameter | Description | Type | -|----------------------|--------------------------------------------------------------------------|----------------| -| `ionFlux` | Ion flux for the SF6 etching process. | `double` | -| `etchantFlux` | Etchant flux for the SF6 etching process. | `double` | -| `meanEnergy` | Mean energy of ions (eV). | `NumericType` | -| `sigmaEnergy` | Energy distribution standard deviation (eV). | `NumericType` | -| `ionExponent` | (Optional) Exponent in the power cosine source distribution of ions for initial directions. Default is set to 300. | `NumericType` | -| `etchStopDepth` | (Optional) Depth at which etching should stop. Default is negative infinity.| `NumericType` | - -{: .note} -> All flux values are units 1015 / cm2 /s2 . - -The detailed parameters can be accessed and modified in the same way as for the SF6O2 etching model. - ## Related Examples * [Hole Etching](https://github.com/ViennaTools/ViennaPS/tree/master/examples/holeEtching) diff --git a/docs/process/index.md b/docs/process/index.md index c1496e88..d90868c9 100644 --- a/docs/process/index.md +++ b/docs/process/index.md @@ -26,8 +26,6 @@ Process process; process.setDomain(myDomain); process.setProcessModel(myModel); process.setProcessDuration(10.); -process.setNumberOfRaysPerPoint(1000); -process.enableFluxSmoothing(); process.apply(); ... ``` @@ -44,8 +42,6 @@ process = vps.Process() process.setDomain(myDomain) process.setProcessModel(myModel) process.setProcessDuration(10.) -process.setNumberOfRaysPerPoint(1000) -process.enableFluxSmoothing() process.apply() ... ``` @@ -183,18 +179,52 @@ void setProcessDuration(NumericType passedDuration) Specifies the duration of the process. If the process duration is set to 0, exclusively the advection callback `applyPreAdvect()` is executed on the domain. This feature is particularly useful for applying only a volume model without engaging in further simulation steps. --- -### Set the number of rays to be traced +### Single-Pass Flux Calculation ```c++ -void setNumberOfRaysPerPoint(unsigned raysPerPoint) +SmartPointer> calculateFlux() ``` -Specify the number of rays to be traced for each particle throughout the process. The total count of rays is the product of this number and the number of points in the process geometry. +Calculate the flux(es) for the current process. This function returns a smart pointer to a `viennals::Mesh` object containing the disk mesh and flux data. --- ### Set the number of coverage initialization iterations ```c++ void setMaxCoverageInitIterations(unsigned numIter) ``` -Set the number of iterations to initialize the coverages. +Set the maximum number of iterations to initialize the coverages. If additionally the coverage delta threshold is set, the coverage initialization is considered converged if the coverage delta is below the threshold or the maximum number of iterations is reached. + +--- +### Set coverage delta threshold +```c++ +void setCoverageDeltaThreshold(NumericType threshold) +``` +Set the threshold for the coverage delta metric to reach convergence. If the coverage delta is below this threshold, the coverage initialization is considered converged. During a process, if the coverage delta is higher than this threshold, the flux calculation is repeated. + +--- +### Set the advection parameters +```c++ +void setAdvectionParameters(const AdvectionParameters& passedAdvectionParameters) +``` +Set the advection parameters for the level-set integration. The advection parameters are defined in the `AdvectionParameters` struct. + +--- +### Set the ray tracing parameters +```c++ +void setRayTracingParameters(const RayTracingParameters& passedRayTracingParameters) +``` +Set the ray tracing parameters for the flux calculation. The ray tracing parameters are defined in the `RayTracingParameters` struct. + +--- + +{: .note } +> The following functions are used to set parameters in the `AdvectionParameters` and `RayTracingParameters` structs. +> From version **3.3.0**, it is recommended to use the `setAdvectionParameters` and `setRayTracingParameters` functions to set these parameters. + +--- +### Set the number of rays to be traced +```c++ +void setNumberOfRaysPerPoint(unsigned raysPerPoint) +``` +Specify the number of rays to be traced for each particle throughout the process. The total count of rays is the product of this number and the number of points in the process geometry. --- ### Enable or disable flux smoothing