@font-face{font-family:gentium book plus;src:url(/fonts/gentium-book-plus/GentiumBookPlus-Regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:gentium book plus;src:url(/fonts/gentium-book-plus/GentiumBookPlus-Italic.woff2)format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:gentium book plus;src:url(/fonts/gentium-book-plus/GentiumBookPlus-Bold.woff2)format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:gentium book plus;src:url(/fonts/gentium-book-plus/GentiumBookPlus-BoldItalic.woff2)format("woff2");font-weight:700;font-style:italic;font-display:swap}@font-face{font-family:iosevka fixed slab;src:url(/fonts/iosevka-fixed-slab/IosevkaFixedSlab-Regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:iosevka fixed slab;src:url(/fonts/iosevka-fixed-slab/IosevkaFixedSlab-Bold.woff2)format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:"source serif 4";src:url(/fonts/source-serif-4/SourceSerif4-Regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:"source serif 4";src:url(/fonts/source-serif-4/SourceSerif4-Italic.woff2)format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:"source serif 4";src:url(/fonts/source-serif-4/SourceSerif4-Bold.woff2)format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:"source serif 4";src:url(/fonts/source-serif-4/SourceSerif4-BoldItalic.woff2)format("woff2");font-weight:700;font-style:italic;font-display:swap}@font-face{font-family:"source sans 3";src:url(/fonts/source-sans-3/SourceSans3-Regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:"source sans 3";src:url(/fonts/source-sans-3/SourceSans3-Italic.woff2)format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:"source sans 3";src:url(/fonts/source-sans-3/SourceSans3-Bold.woff2)format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:"source sans 3";src:url(/fonts/source-sans-3/SourceSans3-BoldItalic.woff2)format("woff2");font-weight:700;font-style:italic;font-display:swap}@font-face{font-family:source han serif sc;src:url(/fonts/source-han-serif-sc/SourceHanSerifSC-Regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:source han serif sc;src:url(/fonts/source-han-serif-sc/SourceHanSerifSC-Bold.woff2)format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:source han sans sc;src:url(/fonts/source-han-sans-sc/SourceHanSansSC-Regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:source han sans sc;src:url(/fonts/source-han-sans-sc/SourceHanSansSC-Bold.woff2)format("woff2");font-weight:700;font-style:normal;font-display:swap}:root{--fi-primary:light-dark(#557066, #7a9a8c);--fi-secondary:light-dark(#6e6963, #9e9992);--fi-success:light-dark(#5a7a56, #7a9a76);--fi-info:light-dark(#567088, #7a92a8);--fi-warning:light-dark(#b09248, #caae60);--fi-danger:light-dark(#b55c54, #cc7a70);--fi-global-background-color:light-dark(#faf7f0, #1e1d1a);--fi-global-font-color:light-dark(#2d2822, #e3ddd3);--fi-global-font-secondary-color:light-dark(#6e6963, #9e9992);--fi-global-font-tertiary-color:light-dark(#9a948c, #7a7570);--fi-global-link-color:light-dark(#4f6782, #c4ae80);--fi-global-link-hover-color:light-dark(#3a4f66, #dac898);--fi-global-border-color:light-dark(#e0dbd0, #3a3632);--fi-global-border-color-light:light-dark(#e9e5da, #322f2c);--fi-global-border-color-weight:light-dark(#d6d0c4, #423e3a);--fi-table-background-color:light-dark(#fcf9f4, #22211e);--fi-table-thead-color:light-dark(#efeade, #2c2a27);--fi-table-border-color:light-dark(#e0dbd0, #3a3632);--fi-code-color:light-dark(#48433d, #d3cec6);--fi-code-inline-background-color:light-dark(rgba(185, 178, 165, 0.30), rgba(120, 115, 108, 0.25));--fi-code-block-background-color:light-dark(#f2ede5, #21201d);--fi-code-header-color:light-dark(#6e6963, #9e9992);--fi-code-header-background-color:light-dark(#e9e4da, #1c1b19);--fi-code-highlight-color:light-dark(#e5d8b0, rgba(180, 165, 120, 0.20));--fi-blockquote-color:light-dark(#6e6963, #9e9992);--fi-hr-active-color:light-dark(#b09248, #caae60);--fi-header-background-color:light-dark(#f3efe6, #1a1917);--fi-menu-active-color:light-dark(#2d2822, #e3ddd3);--fi-menu-border-color:light-dark(rgba(45, 40, 34, 0.10), rgba(227, 221, 211, 0.08));--fi-search-background-color:light-dark(#ede8de, #22211e);--fi-github-corner-fill:light-dark(#1e1d1a, #f3efe6);--fi-github-corner-color:light-dark(#f3efe6, #1e1d1a);--fi-selection-color:light-dark(rgba(79, 103, 130, 0.16), rgba(196, 174, 128, 0.18));--fi-tag-cloud-start:light-dark(#6e6963, #9e9992);--fi-tag-cloud-end:light-dark(#2d2822, #e3ddd3);--fi-pagination-link-color:light-dark(#9a948c, #7a7570);--fi-pagination-link-hover-color:light-dark(#2d2822, #e3ddd3);--fi-single-link-color:light-dark(#4f6782, #c4ae80);--fi-single-link-hover-color:light-dark(#3a4f66, #dac898);--fi-code-font-family:"Iosevka Fixed Slab", "Cascadia Mono", "JetBrains Mono", "SFMono-Regular", "Consolas", "Liberation Mono", monospace}.language-switch .sub-menu [title=日本語]{font-size:16px;font-family:source han serif jp,source han serif,serif}.language-switch .sub-menu [title=中文]{font-size:16px;font-family:source han serif sc,source han serif,serif}.language-switch .sub-menu [title=English]{font-size:17px;font-family:"source serif 4",serif}.language-switch .sub-menu [title=français]{font-size:17px;font-family:"source serif 4",serif}.language-switch .sub-menu [title=Latīnum]{font-size:17px;font-family:"source serif 4",serif}.language-switch .sub-menu [title=Ἑλλάς]{font-size:17px;font-family:"source serif 4",serif}#header-desktop .header-wrapper .menu .menu-item.language-switch .sub-menu{max-height:none;overflow:visible}#header-desktop .header-wrapper .menu .menu-item.language-switch .sub-menu .menu-item{height:auto;overflow:visible;max-width:16rem}#language-select option[value="/"]{font-size:16px;font-family:source han serif sc,source han sans sc,source han serif,serif}#language-select option[value^="/zh/"]{font-size:16px;font-family:source han serif sc,source han sans sc,source han serif,serif}#language-select option[value^="/ja/"]{font-size:16px;font-family:source han serif jp,source han serif,serif}#language-select option[value^="/en/"]{font-size:17px;font-family:"source serif 4",serif}#language-select option[value^="/fr/"]{font-size:17px;font-family:"source serif 4",serif}#language-select option[value^="/la/"]{font-size:17px;font-family:"source serif 4",serif}#language-select option[value^="/grc/"]{font-size:17px;font-family:"source serif 4",serif}a,a::before,a::after{color:light-dark(#4f6782,#c4ae80)!important}a:active,a:hover{color:light-dark(#3a4f66,#dac898)!important}.menu-link{color:light-dark(#2d2822,#e3ddd3)!important}.menu-link:active,.menu-link:hover{color:light-dark(#4f6782,#c4ae80)!important}.single .content a,.single .content a::before,.single .content a::after{color:light-dark(#4f6782,#c4ae80)!important}.single .content a:active,.single .content a:hover{color:light-dark(#3a4f66,#dac898)!important}body{font-family:gentium book plus,serif;font-size:20px;line-height:1.8;font-variant-numeric:oldstyle-nums;font-variant-ligatures:common-ligatures;font-kerning:normal}.home .single.summary .post-meta,.home .single.summary .post-footer{font-size:18.7px}footer.footer{font-size:16px}:lang(zh) body{font-family:"source serif 4",source serif,source han serif sc,source han serif,serif;font-size:18.7px;font-variant-numeric:normal}:lang(ja) body{font-family:"source serif 4",source serif,source han serif jp,source han serif,serif;font-size:18.7px;font-variant-numeric:normal}article{line-height:1.8;word-spacing:.03em;hyphens:auto;-webkit-hyphens:auto;-ms-hyphens:auto;overflow-wrap:break-word;-webkit-font-smoothing:antialiased;line-break:strict;widows:2;orphans:2;text-wrap:pretty}:lang(zh) article,:lang(ja) article{hyphens:none;hanging-punctuation:first allow-end}code,pre,kbd,samp,.code-block,.highlight{font-family:iosevka fixed slab,cascadia mono,jetbrains mono,sfmono-regular,consolas,liberation mono,monospace}blockquote{font-style:italic}.home-avatar img{box-shadow:0 0 0 .3618em light-dark(rgba(45,40,34,4%),rgba(227,221,211,4%))!important}.single .highlight .chroma .k,.single .highlight .chroma .kd,.single .highlight .chroma .kn,.single .highlight .chroma .kp,.single .highlight .chroma .kr,.single .highlight .chroma .kt,.single .highlight .chroma .kc,.single .highlight .chroma .o,.single .highlight .chroma .ow{color:light-dark(#7a5a4a,#d4b08a)!important}.single .highlight .chroma .s,.single .highlight .chroma .sa,.single .highlight .chroma .sb,.single .highlight .chroma .sc,.single .highlight .chroma .dl,.single .highlight .chroma .sd,.single .highlight .chroma .s2,.single .highlight .chroma .se,.single .highlight .chroma .sh,.single .highlight .chroma .si,.single .highlight .chroma .sx,.single .highlight .chroma .sr,.single .highlight .chroma .s1,.single .highlight .chroma .ss,.single .highlight .chroma .ld{color:light-dark(#5a7a56,#8ab88a)!important}.single .highlight .chroma .m,.single .highlight .chroma .mb,.single .highlight .chroma .mf,.single .highlight .chroma .mh,.single .highlight .chroma .mi,.single .highlight .chroma .il,.single .highlight .chroma .mo{color:light-dark(#567088,#8aa8c0)!important}.single .highlight .chroma .c,.single .highlight .chroma .ch,.single .highlight .chroma .cm,.single .highlight .chroma .c1,.single .highlight .chroma .cs,.single .highlight .chroma .cpf,.single .highlight .chroma .cp{color:light-dark(#8a847c,#7a7570)!important}.single .highlight .chroma .nf,.single .highlight .chroma .fm,.single .highlight .chroma .na,.single .highlight .chroma .nl,.single .highlight .chroma .py,.single .highlight .chroma .n,.single .highlight .chroma .ni,.single .highlight .chroma .ne,.single .highlight .chroma .g,.single .highlight .chroma .gh,.single .highlight .chroma .go,.single .highlight .chroma .gp,.single .highlight .chroma .gu,.single .highlight .chroma .w,.single .highlight .chroma .x,.single .highlight .chroma .nb,.single .highlight .chroma .nx,.single .highlight .chroma .bp{color:light-dark(#4f6782,#b8c8d8)!important}.single .highlight .chroma .nc,.single .highlight .chroma .nn,.single .highlight .chroma .nt,.single .highlight .chroma .no{color:light-dark(#8a7a4a,#c8b88a)!important}.single .highlight .chroma .nv,.single .highlight .chroma .vc,.single .highlight .chroma .vg,.single .highlight .chroma .vi,.single .highlight .chroma .vm{color:light-dark(#895f5f,#c8a0a0)!important}.single .highlight .chroma .nd{color:light-dark(#6a5a7a,#b0a0c0)!important}.single .highlight .chroma .gd{color:light-dark(#b55c54,#cc7a70)!important;background:light-dark(rgba(181,92,84,8%),rgba(204,122,112,.1))!important}.single .highlight .chroma .gi{color:light-dark(#5a7a56,#8ab88a)!important;background:light-dark(rgba(90,122,86,8%),rgba(138,184,138,.1))!important}.single .highlight .chroma .ge{font-style:italic!important}.single .highlight .chroma .gs{font-weight:700!important}.single .highlight .chroma .gl{text-decoration:underline!important}.single .highlight .chroma .err,.single .highlight .chroma .gr,.single .highlight .chroma .gt{color:light-dark(#ff4500,#ff7700)!important;font-weight:600!important}.single .content .code-block.highlight{position:relative;z-index:0;margin:1.5em 0;border-radius:6px;background:var(--fi-code-block-background-color);box-shadow:0 1px 2px rgba(0,0,0,4%),0 3px 8px rgba(0,0,0,3%)}.single .content .code-block.highlight::before{content:"";position:absolute;z-index:1;inset:0;pointer-events:none;border-radius:6px;box-shadow:inset 3px 0 light-dark(#557066,#c4ae80)}.single .content .code-block.highlight .code-wrapper>pre{margin:0;border:none;background:0 0!important}.single .content .code-block .code-header{padding:.4em 1em .4em calc(1em + 3px);font-size:.8125em;letter-spacing:.02em}.single .content .code-block .code-header .code-action{opacity:.4;transition:opacity .15s}.single .content .code-block .code-header .code-action:hover{opacity:1}.single .content .table-wrapper{margin:1.5em 0;border-radius:6px}.single .content .table-wrapper>table:not([class]){font-size:.875em;line-height:1.7}.single .content .table-wrapper>table:not([class]) thead th{padding:.55em 1em;font-weight:600;border-bottom:2px solid var(--fi-primary);color:var(--fi-global-font-color)}.single .content .table-wrapper>table:not([class]) tbody tr:nth-child(odd){background:light-dark(rgba(0,0,0,.016),rgba(255,255,255,2%))}.single .content .table-wrapper>table:not([class]) tbody tr:nth-child(even){background:light-dark(rgba(0,0,0,.025),rgba(255,255,255,3%))}.single .content .table-wrapper>table:not([class]) tbody tr:hover{background:light-dark(rgba(0,0,0,.042),rgba(255,255,255,.045))}.single .content .table-wrapper>table:not([class]) tbody td{padding:.5em 1em}.single .content .table-wrapper>table:not([class]) tbody td:first-child{color:var(--fi-global-font-secondary-color)}.single .content .mermaid svg .node rect,.single .content .mermaid svg .node circle,.single .content .mermaid svg .node polygon,.single .content .mermaid svg .node path,.single .content .mermaid-neutral svg .node rect,.single .content .mermaid-neutral svg .node circle,.single .content .mermaid-neutral svg .node polygon,.single .content .mermaid-neutral svg .node path{fill:light-dark(#f2ede5,#21201d)!important;stroke:var(--fi-primary)!important}.single .content .mermaid svg .node .label,.single .content .mermaid svg .node .label span,.single .content .mermaid svg .label,.single .content .mermaid-neutral svg .node .label,.single .content .mermaid-neutral svg .node .label span,.single .content .mermaid-neutral svg .label{color:var(--fi-global-font-color)!important}.single .content .mermaid svg .edgePath .path,.single .content .mermaid svg .edge-threshold-normal,.single .content .mermaid svg .edge-threshold-visible,.single .content .mermaid-neutral svg .edgePath .path,.single .content .mermaid-neutral svg .edge-threshold-normal,.single .content .mermaid-neutral svg .edge-threshold-visible{stroke:var(--fi-secondary)!important}.single .content .mermaid svg .marker,.single .content .mermaid svg .markerCross,.single .content .mermaid svg .markerHalf,.single .content .mermaid svg .markerArrow,.single .content .mermaid svg .arrowMarkerPath,.single .content .mermaid-neutral svg .marker,.single .content .mermaid-neutral svg .markerCross,.single .content .mermaid-neutral svg .markerHalf,.single .content .mermaid-neutral svg .markerArrow,.single .content .mermaid-neutral svg .arrowMarkerPath{fill:var(--fi-secondary)!important;stroke:var(--fi-secondary)!important}.single .content .mermaid svg .edgeLabel,.single .content .mermaid-neutral svg .edgeLabel{background:0 0!important;color:var(--fi-global-font-secondary-color)!important;border:none!important;padding:.05em .3em;font-size:.75em;font-style:italic;letter-spacing:.01em}.single .content .mermaid svg .edgeLabel .label,.single .content .mermaid-neutral svg .edgeLabel .label{color:var(--fi-global-font-secondary-color)!important;font-style:italic}.single .content .mermaid svg .edgeLabel rect,.single .content .mermaid-neutral svg .edgeLabel rect{fill:light-dark(rgba(252,249,244,.85),rgba(34,33,30,.85))!important;stroke:none!important}.single .content .mermaid svg .cluster rect,.single .content .mermaid-neutral svg .cluster rect{fill:light-dark(rgba(0,0,0,2%),rgba(255,255,255,2%))!important;stroke:var(--fi-global-border-color-light)!important;stroke-dasharray:4 3}.single .content .mermaid svg .cluster .cluster-label span,.single .content .mermaid-neutral svg .cluster .cluster-label span{color:var(--fi-global-font-secondary-color)!important}.single .content .mermaid svg .note,.single .content .mermaid-neutral svg .note{fill:light-dark(#ede8de,#22211e)!important;stroke:var(--fi-primary)!important}.single .content .mermaid svg .noteText,.single .content .mermaid svg .noteText span,.single .content .mermaid-neutral svg .noteText,.single .content .mermaid-neutral svg .noteText span{color:var(--fi-global-font-color)!important}.single .content .mermaid svg .actor,.single .content .mermaid-neutral svg .actor{fill:light-dark(#f2ede5,#1e1d1a)!important;stroke:var(--fi-primary)!important}.single .content .mermaid svg .actor-line,.single .content .mermaid-neutral svg .actor-line{stroke:var(--fi-secondary)!important}.single .content .mermaid svg .messageLine0,.single .content .mermaid svg .messageLine1,.single .content .mermaid-neutral svg .messageLine0,.single .content .mermaid-neutral svg .messageLine1{stroke:var(--fi-global-border-color-weight)!important}.single .content .mermaid svg .classGroup rect,.single .content .mermaid-neutral svg .classGroup rect{fill:light-dark(#f2ede5,#21201d)!important;stroke:var(--fi-secondary)!important}.single .content .mermaid svg .classGroup .label,.single .content .mermaid svg .classGroup .label span,.single .content .mermaid-neutral svg .classGroup .label,.single .content .mermaid-neutral svg .classGroup .label span{color:var(--fi-global-font-color)!important}.single .content .mermaid svg .relation,.single .content .mermaid-neutral svg .relation{stroke:var(--fi-secondary)!important}.single .content .mermaid svg .composition,.single .content .mermaid svg .aggregation,.single .content .mermaid svg .dependency,.single .content .mermaid-neutral svg .composition,.single .content .mermaid-neutral svg .aggregation,.single .content .mermaid-neutral svg .dependency{fill:var(--fi-secondary)!important;stroke:var(--fi-secondary)!important}.single .content .mermaid svg .task,.single .content .mermaid-neutral svg .task{fill:var(--fi-primary)!important;stroke:var(--fi-primary)!important}.single .content .mermaid svg .taskText,.single .content .mermaid-neutral svg .taskText{fill:light-dark(#faf7f0,#e3ddd3)!important}.single .content .mermaid svg .active0,.single .content .mermaid-neutral svg .active0{fill:light-dark(#e5d8b0,rgba(180,165,120,.2))!important;stroke:var(--fi-warning)!important}.single .content .mermaid svg .done0,.single .content .mermaid-neutral svg .done0{fill:light-dark(#d6d0c4,#3a3632)!important;stroke:light-dark(#b8b0a8,#4a4640)!important}.single .content .mermaid svg .grid .tick line,.single .content .mermaid-neutral svg .grid .tick line{stroke:var(--fi-global-border-color-light)!important}.single .content .mermaid svg .grid .tick text,.single .content .mermaid-neutral svg .grid .tick text{fill:var(--fi-global-font-secondary-color)!important}.single .content .mermaid svg .stateGroup rect,.single .content .mermaid-neutral svg .stateGroup rect{fill:light-dark(#f2ede5,#21201d)!important;stroke:var(--fi-primary)!important}.single .content .mermaid svg .stateGroup .state-title,.single .content .mermaid-neutral svg .stateGroup .state-title{color:var(--fi-global-font-color)!important;font-weight:600}.single .content .mermaid svg .transition,.single .content .mermaid-neutral svg .transition{stroke:var(--fi-secondary)!important}.single .content .mermaid svg .subgraph rect,.single .content .mermaid-neutral svg .subgraph rect{fill:light-dark(rgba(0,0,0,.015),rgba(255,255,255,2%))!important;stroke:var(--fi-global-border-color-light)!important;stroke-dasharray:4 4}.single .content .mermaid svg .subgraph .subgraph-label,.single .content .mermaid-neutral svg .subgraph .subgraph-label{color:var(--fi-global-font-secondary-color)!important;font-weight:600}.single .content .mermaid-dark svg .node rect,.single .content .mermaid-dark svg .node circle,.single .content .mermaid-dark svg .node polygon,.single .content .mermaid-dark svg .node path{fill:#21201d!important;stroke:#c4ae80!important}.single .content .mermaid-dark svg .edgePath .path{stroke:#7a7570!important}.single .content .mermaid-dark svg .marker{fill:#7a7570!important;stroke:#7a7570!important}.single .content .mermaid-dark svg .actor{fill:#1e1d1a!important;stroke:#c4ae80!important}.single .content .mermaid-dark svg .note{fill:#1a1917!important;stroke:#c4ae80!important}.single .content .mermaid-dark svg .stateGroup rect{fill:#21201d!important;stroke:#c4ae80!important}.single .content .mermaid-dark svg .classGroup rect{fill:#21201d!important;stroke:#3a3632!important}.single .content .mermaid-dark svg .task{fill:#7a9a8c!important;stroke:#7a9a8c!important}.single .content .mermaid-dark svg .taskText{fill:#e3ddd3!important}.single .content .mermaid-dark svg .active0{fill:rgba(180,165,120,.2)!important;stroke:#caae60!important}.single .content .mermaid-dark svg .done0{fill:#2c2a27!important;stroke:#3a3632!important}.single .content .mermaid-dark svg .subgraph rect{fill:hsla(0,0%,100%,2%)!important;stroke:#322f2c!important}.single .content .mermaid-dark svg .cluster rect{fill:hsla(0,0%,100%,2%)!important;stroke:#322f2c!important;stroke-dasharray:4 3}.single .content .mermaid-dark svg .cluster .cluster-label span{color:#9e9992!important}.single .content .mermaid-dark svg .edgeLabel{background:0 0!important;border:none!important;color:#9e9992!important;font-style:italic}.single .content .mermaid-dark svg .edgeLabel .label{color:#9e9992!important;font-style:italic}.single .content .mermaid-dark svg .label{color:#e3ddd3!important}.single .content .mermaid-dark svg .node .label,.single .content .mermaid-dark svg .node .label span{color:#e3ddd3!important}