:root{--category-tech-node:#5fb4b6;--category-tech-text:#7dd8da;--category-tech-hull-dark:rgba(95,180,182,.15);--category-tech-border-dark:rgba(95,180,182,.8);--category-personal-node:#c594c5;--category-personal-text:#dbb3db;--category-personal-hull-dark:rgba(197,148,197,.15);--category-personal-border-dark:rgba(197,148,197,.8);--category-projects-node:#fac863;--category-projects-text:#ffd885;--category-projects-hull-dark:rgba(250,200,99,.15);--category-projects-border-dark:rgba(250,200,99,.8);--category-guides-node:#99c794;--category-guides-text:#b3dbb0;--category-guides-hull-dark:rgba(153,199,148,.15);--category-guides-border-dark:rgba(153,199,148,.8);--category-smart_home-node:#ec5f67;--category-smart_home-text:#f07b82;--category-smart_home-hull-dark:rgba(236,95,103,.15);--category-smart_home-border-dark:rgba(236,95,103,.8);--category-reviews-node:#6c99bb;--category-reviews-text:#8fb1cc;--category-reviews-hull-dark:rgba(108,153,187,.15);--category-reviews-border-dark:rgba(108,153,187,.8);--category-default-text:#bbb;--category-default-hull-dark:hsla(0,0%,60%,.15);--category-default-border-dark:hsla(0,0%,60%,.8);--font-family:"JetBrains Mono Fast",monospace;--line-height:1.2rem;--border-thickness:2px;--text-color:#fff;--text-color-alt:#aaa;--background-color:#000;--background-color-alt:#111;--font-weight-normal:500;--font-weight-medium:600;--font-weight-bold:800;font-style:normal;font-weight:500;font-weight:var(--font-weight-normal);font-size:1pc;font-family:JetBrains Mono Fast,monospace;font-family:var(--font-family);font-optical-sizing:auto;font-variant-numeric:tabular-nums lining-nums;font-feature-settings:"calt" 1,tabular-nums lining-nums;color-scheme:dark}*{box-sizing:border-box}*+*{margin-top:1.2rem;margin-top:var(--line-height)}html{display:flex;flex-direction:column;align-items:center;padding:0;background:#000;background:var(--background-color);color:#fff;color:var(--text-color)}body,html{width:100%;margin:0}body{position:relative;max-width:calc(min(120ch, round(down, 100%, 1ch)));padding:1.2rem 2ch;padding:var(--line-height) 2ch;overflow-x:hidden}body,h1,h2,h3,h4,h5{line-height:1.2rem;line-height:var(--line-height)}h1,h2,h3,h4,h5{margin:2.4rem 0 1.2rem;margin:calc(var(--line-height)*2) 0 var(--line-height);font-weight:800;font-weight:var(--font-weight-bold)}h1{margin-bottom:2.4rem;margin-bottom:calc(var(--line-height)*2);font-size:2rem;line-height:2.4rem;line-height:calc(var(--line-height)*2)}h1,h2{text-transform:uppercase}h2{font-size:1rem}hr{position:relative;height:1.2rem;height:var(--line-height);margin:1.8rem 0;margin:calc(var(--line-height)*1.5) 0;border:none;color:#fff;color:var(--text-color)}hr,hr:after{display:block}hr:after{position:absolute;top:calc(.6rem - 2px);top:calc(var(--line-height)/2 - var(--border-thickness));left:0;width:100%;height:0;border-top:6px double #fff;border-top:calc(var(--border-thickness)*3) double var(--text-color);content:""}a{text-decoration-thickness:2px;text-decoration-thickness:var(--border-thickness)}a:link,a:visited{color:#fff;color:var(--text-color)}p{margin-bottom:1.2rem;margin-bottom:var(--line-height);word-break:break-word;word-wrap:break-word;hyphens:auto}strong{font-weight:800;font-weight:var(--font-weight-bold)}em{font-style:italic}table{position:relative}table{top:.6rem;top:calc(var(--line-height)/2);width:calc(round(down, 100%, 1ch));margin:0 0 2.4rem;margin:0 0 calc(var(--line-height)*2);border-collapse:collapse}td,th{padding:.6rem calc(1ch - 1px) calc(.6rem - 2px);padding:calc(var(--line-height)/2) calc(1ch - var(--border-thickness)/2) calc(var(--line-height)/2 - var(--border-thickness));border:2px solid #fff;border:var(--border-thickness) solid var(--text-color);line-height:1.2rem;line-height:var(--line-height);text-align:left;vertical-align:top}table tbody tr:first-child>*{padding-top:calc(.6rem - 2px);padding-top:calc(var(--line-height)/2 - var(--border-thickness))}th{font-weight:700}.width-min{width:0}.width-auto{width:100%}.no-margin{margin:0}.grid-grow{flex-grow:1}.defer-render{contain-intrinsic-size:50pc 600px;content-visibility:auto}.header{margin-bottom:2.4rem;margin-bottom:calc(var(--line-height)*2)}.header h1{margin:0}.header tr td:last-child{text-align:right}.title-link{color:inherit;-webkit-text-decoration:none;text-decoration:none}.header-search-row{position:relative;padding-top:.6rem;padding-top:calc(var(--line-height)/2);padding-bottom:.6rem;padding-bottom:calc(var(--line-height)/2)}.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.header-search-form{display:flex;width:100%;gap:0;line-height:1.2rem;line-height:var(--line-height)}.header-search-form,.header-search-input{font-family:JetBrains Mono Fast,monospace;font-family:var(--font-family)}.header-search-input{flex:1;min-width:0;padding:.3rem 1ch;padding:calc(var(--line-height)/4) 1ch;border:2px solid #fff;border:var(--border-thickness) solid var(--text-color);border-right:none;outline:none;background:#000;background:var(--background-color);color:#fff;color:var(--text-color);font-size:.875rem}.header-search-input::-moz-placeholder{color:#aaa;color:var(--text-color-alt)}.header-search-input::placeholder{color:#aaa;color:var(--text-color-alt)}.header-search-input:focus{outline:none;background:#111;background:var(--background-color-alt)}.header-search-button{padding:.3rem 2ch;padding:calc(var(--line-height)/4) 2ch;border:2px solid #fff;border:var(--border-thickness) solid var(--text-color);background:#000;background:var(--background-color);color:#fff;color:var(--text-color);font-weight:500;font-weight:var(--font-weight-normal);font-size:.875rem;font-family:JetBrains Mono Fast,monospace;font-family:var(--font-family);white-space:nowrap;cursor:pointer;transition:background-color .15s ease,color .15s ease}.header-search-button:hover{background:#fff;background:var(--text-color);color:#000;color:var(--background-color)}.header-search-button:active{background:#aaa;background:var(--text-color-alt)}img,video{display:block;width:100%;overflow:hidden;object-fit:contain}img{color:#aaa;color:var(--text-color-alt);font-style:italic}details{margin-bottom:1.2rem;margin-bottom:var(--line-height);padding:calc(1.2rem - 2px) 1ch;padding:calc(var(--line-height) - var(--border-thickness)) 1ch;border:2px solid #fff;border:var(--border-thickness) solid var(--text-color)}summary{font-weight:600;font-weight:var(--font-weight-medium);cursor:pointer}details[open] summary{margin-bottom:1.2rem;margin-bottom:var(--line-height)}details::marker{display:inline-block;margin:0;content:"▶"}details[open]::marker{content:"▼"}details:last-child{margin-bottom:0}pre{margin:1.2rem 0;margin:var(--line-height) 0;overflow-x:auto;overflow-y:hidden;white-space:pre}figure pre{margin:0}code,pre{font-family:JetBrains Mono Fast,monospace;font-family:var(--font-family)}code{font-weight:600;font-weight:var(--font-weight-medium)}figure{margin:2.4rem 3ch;margin:calc(var(--line-height)*2) 3ch;overflow-x:auto;overflow-y:hidden}figcaption{display:block;margin-top:1.2rem;margin-top:var(--line-height);font-style:italic}ol,ul{margin:0 0 1.2rem;margin:0 0 var(--line-height);padding:0}ul{padding:0 0 0 2ch;list-style-type:square}ol{padding:0;list-style-type:none;counter-reset:a}ol ol,ol ul,ul ol,ul ul{margin:0;padding:0 0 0 3ch}ol li:before{content:counters(a,".") ". ";font-weight:600;font-weight:var(--font-weight-medium);counter-increment:a}li{margin:0;padding:0}li::marker{line-height:0}::-webkit-scrollbar{height:1.2rem;height:var(--line-height)}button,input,textarea{width:auto;height:2.4rem;height:calc(var(--line-height)*2);margin:0;padding:calc(.6rem - 2px) calc(1ch - 2px);padding:calc(var(--line-height)/2 - var(--border-thickness)) calc(1ch - var(--border-thickness));overflow:visible;border:2px solid #fff;border:var(--border-thickness) solid var(--text-color);background:#000;background:var(--background-color);color:#fff;color:var(--text-color);font:inherit;font-weight:inherit;line-height:normal;-webkit-font-smoothing:inherit;-moz-osx-font-smoothing:inherit;-webkit-appearance:none}input[type=checkbox]{display:inline-grid;align-content:center;justify-content:center;place-content:center;width:2ch;height:1.2rem;height:var(--line-height);vertical-align:top;cursor:pointer}input[type=checkbox]:checked:before{width:1ch;height:.6rem;height:calc(var(--line-height)/2);background:#fff;background:var(--text-color);content:""}button:focus,input:focus{--border-thickness:3px;outline:none}input{width:calc(round(down, 100%, 1ch))}::-moz-placeholder{color:#aaa;color:var(--text-color-alt);opacity:1}::placeholder{color:#aaa;color:var(--text-color-alt);opacity:1}::-ms-input-placeholder{color:#aaa;color:var(--text-color-alt)}button::-moz-focus-inner{padding:0;border:0}button{font-weight:600;font-weight:var(--font-weight-medium);text-transform:uppercase;cursor:pointer}button:hover{background:#111;background:var(--background-color-alt)}button:active{transform:translate(2px,2px)}label{display:block;width:calc(round(down, 100%, 1ch));height:auto;margin:0;font-weight:600;font-weight:var(--font-weight-medium);line-height:1.2rem;line-height:var(--line-height)}label input{width:100%}.form-error-summary,.form-field{margin-bottom:1.2rem;margin-bottom:var(--line-height)}.form-error-summary,.form-note{color:#aaa;color:var(--text-color-alt)}.form-note{margin-top:.6rem;margin-top:calc(var(--line-height)/2);font-size:.875rem}.form-note.form-error{color:#c0392b}.auth-lead{margin-bottom:2.4rem;margin-bottom:calc(var(--line-height)*2)}.auth-actions{margin-top:2.4rem;margin-top:calc(var(--line-height)*2)}.button-min-10ch{min-width:10ch}.button-min-12ch{min-width:12ch}.button-min-15ch{min-width:15ch}.auth-cancel-link{margin-left:2ch}.password-requirements{margin-top:.5rem}.password-requirements-list{margin:0;padding-left:0;font-size:.875rem;list-style:none}.password-requirement{display:flex;align-items:center;margin-bottom:.25rem;gap:.5rem;color:inherit;opacity:.85}.password-requirement-check{display:inline-block;flex-shrink:0;width:1.1em;height:1.1em;border:1px solid;border-radius:2px}.password-requirement.met .password-requirement-check{border-color:#0d7d4a;background:#0d7d4a;color:#fff}.password-requirement.met .password-requirement-check:after{display:block;content:"\2713";font-size:.75em;line-height:1.1;text-align:center}.tree,.tree ul{position:relative;padding-left:0;line-height:1.2rem;line-height:var(--line-height);list-style-type:none}.tree ul{margin:0}.tree ul li{position:relative;margin-left:1.5ch;padding-left:1.5ch;border-left:2px solid #fff;border-left:var(--border-thickness) solid var(--text-color)}.tree ul li:before{display:block;position:absolute;top:.6rem;top:calc(var(--line-height)/2);left:0;width:1ch;border-bottom:2px solid #fff;border-bottom:var(--border-thickness) solid var(--text-color);content:""}.tree ul li:last-child{border-left:none}.tree ul li:last-child:after{display:block;position:absolute;top:0;left:0;height:.6rem;height:calc(var(--line-height)/2);border-left:2px solid #fff;border-left:var(--border-thickness) solid var(--text-color);content:""}.grid{--grid-cells:0;display:flex;width:calc(round(down, 100%, (1ch * 0) - (1ch * 0 - 1)));width:calc(round(down, 100%, (1ch * var(--grid-cells)) - (1ch * var(--grid-cells) - 1)));margin-bottom:1.2rem;margin-bottom:var(--line-height);gap:1ch}.grid>*,.grid>input{flex:0 0 calc(round(down,
        (100% - (1ch * (var(--grid-cells) - 1))) / var(--grid-cells),
        1ch))}.grid:has(>:last-child:first-child){--grid-cells:1}.grid:has(>:last-child:nth-child(2)){--grid-cells:2}.grid:has(>:last-child:nth-child(3)){--grid-cells:3}.grid:has(>:last-child:nth-child(4)){--grid-cells:4}.grid:has(>:last-child:nth-child(5)){--grid-cells:5}.grid:has(>:last-child:nth-child(6)){--grid-cells:6}.grid:has(>:last-child:nth-child(7)){--grid-cells:7}.grid:has(>:last-child:nth-child(8)){--grid-cells:8}.grid:has(>:last-child:nth-child(9)){--grid-cells:9}.blog-posts-table{width:100%;margin:1.2rem 0;margin:var(--line-height) 0;border:2px solid #fff;border:var(--border-thickness) solid var(--text-color);border-collapse:collapse}.blog-posts-table td,.blog-posts-table th{padding:.6rem 1ch;padding:calc(var(--line-height)/2) 1ch;border:none;border-bottom:2px solid #fff;border-bottom:var(--border-thickness) solid var(--text-color);line-height:1.2rem;line-height:var(--line-height);text-align:left;vertical-align:top}.blog-posts-table tbody tr:last-child td{border-bottom:none}.blog-post-cell{display:flex;align-items:baseline;gap:1ch}.category-bubble{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;min-width:6ch;height:1.2rem;height:calc(var(--line-height)*1);margin-top:.2em;padding:0 .5ch;border:1px solid;border-radius:.6rem;border-radius:calc(var(--line-height)*.5);font-weight:600;font-weight:var(--font-weight-medium);font-size:.7rem;line-height:1;text-transform:lowercase;white-space:nowrap;transition:all .2s ease}.category-bubble:hover{transform:scale(1.05);box-shadow:0 2px 8px rgba(0,0,0,.15)}.category-bubble.category-tech{border-color:rgba(95,180,182,.8);border-color:var(--category-tech-border-dark);background-color:rgba(95,180,182,.15);background-color:var(--category-tech-hull-dark);color:#7dd8da;color:var(--category-tech-text)}.category-bubble.category-personal{border-color:rgba(197,148,197,.8);border-color:var(--category-personal-border-dark);background-color:rgba(197,148,197,.15);background-color:var(--category-personal-hull-dark);color:#dbb3db;color:var(--category-personal-text)}.category-bubble.category-projects{border-color:rgba(250,200,99,.8);border-color:var(--category-projects-border-dark);background-color:rgba(250,200,99,.15);background-color:var(--category-projects-hull-dark);color:#ffd885;color:var(--category-projects-text)}.category-bubble.category-guides{border-color:rgba(153,199,148,.8);border-color:var(--category-guides-border-dark);background-color:rgba(153,199,148,.15);background-color:var(--category-guides-hull-dark);color:#b3dbb0;color:var(--category-guides-text)}.category-bubble.category-smart_home{border-color:rgba(236,95,103,.8);border-color:var(--category-smart_home-border-dark);background-color:rgba(236,95,103,.15);background-color:var(--category-smart_home-hull-dark);color:#f07b82;color:var(--category-smart_home-text)}.category-bubble.category-reviews{border-color:rgba(108,153,187,.8);border-color:var(--category-reviews-border-dark);background-color:rgba(108,153,187,.15);background-color:var(--category-reviews-hull-dark);color:#8fb1cc;color:var(--category-reviews-text)}.category-bubble.category-uncategorized{border-color:hsla(0,0%,60%,.8);border-color:var(--category-default-border-dark);background-color:hsla(0,0%,60%,.15);background-color:var(--category-default-hull-dark);color:#bbb;color:var(--category-default-text)}.messages-container{margin:1.2rem 0;margin:var(--line-height) 0;animation:a .3s ease-out}.message{display:flex;position:relative;align-items:center;justify-content:space-between;margin-bottom:1.2rem;margin-bottom:var(--line-height);padding:calc(1.2rem - 2px) 2ch;padding:calc(var(--line-height) - var(--border-thickness)) 2ch;padding-right:4ch;border:2px solid;border:var(--border-thickness) solid;background:#000;background:var(--background-color)}.message-text{flex-grow:1;line-height:1.2rem;line-height:var(--line-height)}.message-close{display:flex;position:absolute;top:50%;right:1ch;align-items:center;justify-content:center;width:2ch;height:2ch;padding:0;transform:translateY(-50%);border:none;background:none;color:#fff;color:var(--text-color);font-weight:800;font-weight:var(--font-weight-bold);font-size:1.5rem;cursor:pointer;opacity:.7;transition:opacity .2s}.message-close:hover{background:none;opacity:1}.message-close:active{transform:translateY(-50%) scale(.9)}.message-success{border-color:#28a745;background:rgba(40,167,69,.2)}.message-info,.message-success{color:#fff;color:var(--text-color)}.message-info{border-color:#17a2b8;background:rgba(23,162,184,.2)}.message-warning{border-color:#ffc107;background:rgba(255,193,7,.2);color:#fff;color:var(--text-color)}.message-danger,.message-error{border-color:#dc3545;background:rgba(220,53,69,.2);color:#fff;color:var(--text-color)}.message-debug{border-color:#6c757d;background:hsla(208,7%,46%,.2);color:#fff;color:var(--text-color)}.tech-pills{display:flex;flex-wrap:wrap;gap:.5ch}.tech-bubble{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;min-width:-moz-fit-content;min-width:fit-content;height:1.2rem;height:calc(var(--line-height)*1);margin-top:.2em;padding:0 .75ch;border:1px solid rgba(108,153,187,.8);border-radius:.6rem;border-radius:calc(var(--line-height)*.5);background-color:rgba(108,153,187,.15);color:#8fb1cc;font-weight:600;font-weight:var(--font-weight-medium);font-size:.7rem;line-height:1;text-transform:none;white-space:nowrap;transition:all .2s ease}.tech-bubble:hover{transform:scale(1.05);box-shadow:0 2px 8px rgba(0,0,0,.15)}.search-results{margin:1.2rem 0 2.4rem;margin:var(--line-height) 0 calc(var(--line-height)*2) 0;padding:0;list-style:none}.search-results li{display:flex;align-items:baseline;margin-bottom:1.2rem;margin-bottom:var(--line-height);gap:1ch}.search-results p{margin:.6rem 0 0 2ch;margin:calc(var(--line-height)/2) 0 0 2ch}.search-result-meta,.search-results p{color:#aaa;color:var(--text-color-alt);font-size:.875rem}.search-results-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));grid-gap:1.2rem;grid-gap:var(--line-height);margin:1.2rem 0 2.4rem;margin:var(--line-height) 0 calc(var(--line-height)*2) 0;gap:1.2rem;gap:var(--line-height)}.search-result-card{display:block;overflow:hidden;border:2px solid #aaa;border:var(--border-thickness) solid var(--text-color-alt);border-radius:4px;color:#fff;color:var(--text-color);-webkit-text-decoration:none;text-decoration:none;transition:border-color .15s ease,box-shadow .15s ease}.search-result-card:hover{border-color:#fff;border-color:var(--text-color);box-shadow:0 2px 8px rgba(0,0,0,.1)}.search-result-image{aspect-ratio:4/3;overflow:hidden;background:#111;background:var(--background-color-alt)}.search-result-image img{width:100%;height:100%;object-fit:cover}.search-result-placeholder{width:100%;height:100%;background:#111;background:var(--background-color-alt)}.search-result-info{padding:.6rem 1ch;padding:calc(var(--line-height)/2) 1ch}.search-result-title{display:block;margin-bottom:.25em;font-weight:500}.search-result-description,.search-result-title{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-line-clamp:2;-webkit-box-orient:vertical}.search-result-description{margin:.25em 0;color:#aaa;color:var(--text-color-alt);font-size:.875rem}.search-result-info .search-result-meta{display:block;font-size:.75rem}.search-autocomplete-item{display:flex;align-items:center;justify-content:space-between}.autocomplete-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.autocomplete-type{flex-shrink:0;margin-left:1ch;padding:.25ch 1ch}.autocomplete-type.category-personal{background:#4a90e2}.autocomplete-type.category-projects{background:#50c878}.autocomplete-type.category-reviews{background:#f39c12}.autocomplete-type.category-tech{background:#e74c3c}.footer{margin-top:2.4rem;margin-top:calc(var(--line-height)*2);font-size:.875rem;text-align:center}.footer p{word-break:break-word;word-wrap:break-word}.footer-badge-image{display:inline;width:auto;height:18px;margin:0;vertical-align:middle}@media screen and (max-width:768px){.projects-table{border:none}.projects-table tbody,.projects-table td,.projects-table tr{display:block;border:none}.projects-table tr{margin-bottom:2.4rem;margin-bottom:calc(var(--line-height)*2);padding:.6rem;padding:calc(var(--line-height)/2);border:2px solid #fff;border:var(--border-thickness) solid var(--text-color)}.projects-table td{padding:.6rem 0;padding:calc(var(--line-height)/2) 0;border-bottom:none}.projects-table td:first-child{margin-bottom:.6rem;margin-bottom:calc(var(--line-height)/2);font-weight:800;font-weight:var(--font-weight-bold)}.projects-table td:last-child{margin-top:.6rem;margin-top:calc(var(--line-height)/2)}.footer{font-size:.75rem;line-height:1.44rem;line-height:calc(var(--line-height)*1.2)}.footer p{padding:0}}@media screen and (max-width:480px){:root{font-size:14px}body{padding:1.2rem 1ch;padding:var(--line-height) 1ch}}code[class*=language-],pre[class*=language-]{background:none;color:#fff;font-size:1em;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;text-align:left;text-shadow:0 -.1em .2em #000;white-space:pre;word-break:normal;word-spacing:normal;word-wrap:normal;line-height:1.5;hyphens:none;-moz-tab-size:4;tab-size:4}:not(pre)>code[class*=language-],pre[class*=language-]{background:#141414}pre[class*=language-]{margin:.5em 0;padding:1em;overflow:auto;border:.3em solid #545454;border-radius:.5em;box-shadow:inset 1px 1px .5em #000}pre[class*=language-]::-moz-selection{background:#27292a}pre[class*=language-]::selection{background:#27292a}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{background:hsla(0,0%,93%,.15);text-shadow:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{background:hsla(0,0%,93%,.15);text-shadow:none}:not(pre)>code[class*=language-]{padding:.15em .2em .05em;border:.13em solid #545454;border-radius:.3em;box-shadow:inset 1px 1px .3em -.1em #000;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#787878}.token.namespace,.token.punctuation{opacity:.7}.token.boolean,.token.deleted,.token.number,.token.tag{color:#cf694a}.token.builtin,.token.constant,.token.keyword,.token.property,.token.selector,.token.symbol{color:#f9ee9a}.language-css .token.string,.style .token.string,.token.attr-name,.token.attr-value,.token.char,.token.entity,.token.inserted,.token.operator,.token.string,.token.url,.token.variable{color:#919e6b}.token.atrule{color:#7386a5}.token.important,.token.regex{color:#e9c163}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.language-markup .token.attr-name,.language-markup .token.punctuation,.language-markup .token.tag{color:#ad895c}.token{z-index:1;position:relative}pre[class*=language-].line-numbers{position:relative;padding-left:3.8em;counter-reset:b}pre[class*=language-].line-numbers>code{position:relative;white-space:inherit}.line-numbers .line-numbers-rows{position:absolute;top:0;left:-3.8em;width:3em;border-right:1px solid #999;font-size:100%;letter-spacing:-1px;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.line-numbers-rows>span{display:block;counter-increment:b}.line-numbers-rows>span:before{display:block;padding-right:.8em;content:counter(b);color:#999;text-align:right}div.code-toolbar{position:relative}div.code-toolbar>.toolbar{z-index:10;position:absolute;top:.3em;right:.2em;opacity:0;transition:opacity .3s ease-in-out}div.code-toolbar:hover>.toolbar{opacity:1}div.code-toolbar:focus-within>.toolbar{opacity:1}div.code-toolbar>.toolbar>.toolbar-item{display:inline-block}div.code-toolbar>.toolbar>.toolbar-item>a{cursor:pointer}div.code-toolbar>.toolbar>.toolbar-item>button{padding:0;overflow:visible;border:0;background:none;color:inherit;font:inherit;line-height:normal;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}div.code-toolbar>.toolbar>.toolbar-item>a,div.code-toolbar>.toolbar>.toolbar-item>button,div.code-toolbar>.toolbar>.toolbar-item>span{padding:0 .5em;border-radius:.5em;background:#f5f2f0;background:hsla(0,0%,88%,.2);box-shadow:0 2px 0 0 rgba(0,0,0,.2);color:#bbb;font-size:.8em}div.code-toolbar>.toolbar>.toolbar-item>a:focus,div.code-toolbar>.toolbar>.toolbar-item>a:hover,div.code-toolbar>.toolbar>.toolbar-item>button:focus,div.code-toolbar>.toolbar>.toolbar-item>button:hover,div.code-toolbar>.toolbar>.toolbar-item>span:focus,div.code-toolbar>.toolbar>.toolbar-item>span:hover{color:inherit;-webkit-text-decoration:none;text-decoration:none}.search-autocomplete{z-index:1000;position:absolute;width:100%;max-width:600px;max-height:25pc;overflow-y:auto;border:2px solid #fff;border:var(--border-thickness) solid var(--text-color);border-top:none;background:#000;background:var(--background-color);box-shadow:0 4px 6px rgba(0,0,0,.1)}.search-autocomplete-item{display:block;padding:.6rem 1ch;padding:calc(var(--line-height)/2) 1ch;border-bottom:2px solid #aaa;border-bottom:var(--border-thickness) solid var(--text-color-alt);color:#fff;color:var(--text-color);-webkit-text-decoration:none;text-decoration:none;cursor:pointer;transition:background-color .15s ease}.search-autocomplete-item:last-child{border-bottom:none}.search-autocomplete-item.selected,.search-autocomplete-item:hover{background:#111;background:var(--background-color-alt)}.autocomplete-title{font-size:.875rem;line-height:1.6}.autocomplete-type{display:inline-block;margin-left:.25ch;padding:.125rem .5rem;border-radius:2px;background:#fff;background:var(--text-color);color:#000;color:var(--background-color);font-size:.75rem;line-height:1;vertical-align:middle;white-space:nowrap}.autocomplete-type.category-tech{background:#5fb4b6;background:var(--category-tech-node);color:#fff}.autocomplete-type.category-personal{background:#c594c5;background:var(--category-personal-node);color:#fff}.autocomplete-type.category-projects{background:#fac863;background:var(--category-projects-node);color:#fff}.autocomplete-type.category-guides{background:#99c794;background:var(--category-guides-node);color:#fff}.autocomplete-type.category-smart_home{background:#ec5f67;background:var(--category-smart_home-node);color:#fff}.autocomplete-type.category-reviews{background:#6c99bb;background:var(--category-reviews-node);color:#fff}.search-autocomplete::-webkit-scrollbar{width:8px}.search-autocomplete::-webkit-scrollbar-track{background:#000;background:var(--background-color)}.search-autocomplete::-webkit-scrollbar-thumb{border-radius:4px;background:#aaa;background:var(--text-color-alt)}.search-autocomplete::-webkit-scrollbar-thumb:hover{background:#fff;background:var(--text-color)}@media (max-width:768px){.search-autocomplete{max-width:100%;max-height:300px}.autocomplete-title{font-size:.8125rem}.autocomplete-type{font-size:.6875rem}}@keyframes a{0%{transform:translateY(10px);opacity:0}to{transform:translateY(0);opacity:1}}code[class*=language-] .token,code[class*=language-] span,pre[class*=language-] .token,pre[class*=language-] span{box-sizing:content-box!important;display:inline!important;margin:0!important;padding:0!important;border:none!important;background:none!important}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{display:inline!important;margin:0!important;padding:0!important;border:none!important;background:none!important}code[class*=language-] *{border:none!important;background:none!important}div.code-toolbar{position:relative!important}div.code-toolbar>.toolbar{display:block!important;z-index:10!important;position:absolute!important;top:0!important;right:0!important;margin:0!important;padding:0!important;border:none!important;background:none!important;box-shadow:none!important;opacity:0!important;transition:opacity .3s ease!important}div.code-toolbar:hover>.toolbar{opacity:1!important}div.code-toolbar>.toolbar>.toolbar-item{all:unset!important;display:inline-block!important;margin:0!important;padding:0!important}div.code-toolbar>.toolbar>.toolbar-item>a,div.code-toolbar>.toolbar>.toolbar-item>button,div.code-toolbar>.toolbar>.toolbar-item>span{all:unset!important;box-sizing:border-box!important;display:inline-block!important;margin:.5rem!important;padding:.4rem .8rem!important;border:1px solid hsla(0,0%,88%,.3)!important;border-radius:.25rem!important;background:hsla(0,0%,88%,.2)!important;color:#c5c8c6!important;font-weight:600!important;font-weight:var(--font-weight-medium)!important;font-size:.7rem!important;font-family:JetBrains Mono Fast,monospace!important;font-family:var(--font-family)!important;text-transform:uppercase!important;cursor:pointer!important;transition:all .2s ease!important}div.code-toolbar>.toolbar>.toolbar-item>a:hover,div.code-toolbar>.toolbar>.toolbar-item>button:hover,div.code-toolbar>.toolbar>.toolbar-item>span:hover{border-color:hsla(0,0%,88%,.5)!important;background:hsla(0,0%,88%,.35)!important}code[class*=language-] .token+.token,code[class*=language-] span+span,pre[class*=language-] .token+.token,pre[class*=language-] span+span{margin-top:0!important}:not(pre)>code{padding:0 .5ch;border:1px solid #fff;border:1px solid var(--text-color);background:#111;background:var(--background-color-alt);font-weight:600;font-weight:var(--font-weight-medium);font-size:.875em;font-family:JetBrains Mono Fast,monospace;font-family:var(--font-family);white-space:nowrap}.blog-tags-section,.related-posts-section{margin-top:2.4rem;margin-top:calc(var(--line-height)*2)}.blog-tags,.related-post-tags{display:flex;flex-wrap:wrap;gap:.5ch}.blog-tag,.related-post-tag{display:inline-flex;align-items:center;padding:.3rem 1ch;padding:calc(var(--line-height)/4) 1ch;border:2px solid #fff;border:var(--border-thickness) solid var(--text-color);background:#111;background:var(--background-color-alt);color:#fff;color:var(--text-color);font-size:.75rem;-webkit-text-decoration:none;text-decoration:none;text-transform:uppercase}.comments-section{margin-top:4.8rem;margin-top:calc(var(--line-height)*4);padding-top:2.4rem;padding-top:calc(var(--line-height)*2);border-top:2px solid #fff;border-top:var(--border-thickness) solid var(--text-color)}.comments-section h2{margin-bottom:2.4rem;margin-bottom:calc(var(--line-height)*2);font-weight:800;font-weight:var(--font-weight-bold);font-size:1.5rem}.comments-section h3{margin-bottom:1.2rem;margin-bottom:var(--line-height);font-weight:600;font-weight:var(--font-weight-medium);font-size:1.2rem}.alert{margin-bottom:2.4rem;margin-bottom:calc(var(--line-height)*2);padding:1.2rem 2ch;padding:var(--line-height) 2ch;border:2px solid #fff;border:var(--border-thickness) solid var(--text-color);background:#111;background:var(--background-color-alt)}.alert-info{border-color:#06c;color:#06c}.comment-form-container{margin-bottom:1.8rem;margin-bottom:calc(var(--line-height)*1.5);padding:.6rem 2ch;padding:calc(var(--line-height)/2) 2ch;border:2px solid #aaa;border:var(--border-thickness) solid var(--text-color-alt);background:#111;background:var(--background-color-alt)}.comment-author-info{margin-bottom:1.2rem;margin-bottom:var(--line-height);color:#aaa;color:var(--text-color-alt)}.comment-form,.reply-form{margin-top:1.2rem;margin-top:var(--line-height)}.reply-form-container{display:none}.reply-form-container.is-visible{display:block}.honeypot-field{display:none}.form-group{margin-bottom:1.8rem;margin-bottom:calc(var(--line-height)*1.5)}.form-group label{display:block;margin-bottom:.6rem;margin-bottom:calc(var(--line-height)/2);font-weight:600;font-weight:var(--font-weight-medium)}.comment-textarea,.reply-input,.reply-textarea{width:100%;padding:.6rem 1ch;padding:calc(var(--line-height)/2) 1ch;border:2px solid #aaa;border:var(--border-thickness) solid var(--text-color-alt);background:#000;background:var(--background-color);color:#fff;color:var(--text-color);font-size:1rem;font-family:JetBrains Mono Fast,monospace;font-family:var(--font-family);resize:vertical}.comment-textarea{min-height:7.2rem;min-height:calc(var(--line-height)*6);line-height:1.5}.reply-textarea{min-height:4.8rem;min-height:calc(var(--line-height)*4);line-height:1.5}.comment-textarea:focus,.reply-input:focus,.reply-textarea:focus{border-color:#fff;border-color:var(--text-color);outline:none}.form-text{display:block;margin-top:.3rem;margin-top:calc(var(--line-height)/4);color:#aaa;color:var(--text-color-alt);font-size:.875rem}.char-count{float:right;font-weight:600;font-weight:var(--font-weight-medium);transition:color .3s ease}.char-count.is-warning{color:orange}.char-count.is-limit,.form-errors{color:#dc3545}.form-errors{margin-top:.6rem;margin-top:calc(var(--line-height)/2);font-size:.875rem}.btn-comment-submit,.btn-reply-submit{padding:.6rem 2ch;padding:calc(var(--line-height)/2) 2ch;border:none;background:#fff;background:var(--text-color);color:#000;color:var(--background-color);font-weight:600;font-weight:var(--font-weight-medium);font-family:JetBrains Mono Fast,monospace;font-family:var(--font-family);text-transform:uppercase;cursor:pointer}.btn-comment-submit:hover,.btn-reply-submit:hover{background:#aaa;background:var(--text-color-alt)}.btn-cancel{margin-left:1ch;padding:.6rem 2ch;padding:calc(var(--line-height)/2) 2ch;border:2px solid #fff;border:var(--border-thickness) solid var(--text-color);background:#000;background:var(--background-color);color:#fff;color:var(--text-color);font-weight:600;font-weight:var(--font-weight-medium);font-family:JetBrains Mono Fast,monospace;font-family:var(--font-family);text-transform:uppercase;cursor:pointer}.btn-cancel:hover{background:#111;background:var(--background-color-alt)}.comments-list{margin-top:2.4rem;margin-top:calc(var(--line-height)*2)}.comment{margin-bottom:1.8rem;margin-bottom:calc(var(--line-height)*1.5);padding:.6rem 2ch;padding:calc(var(--line-height)/2) 2ch;border:2px solid #aaa;border:var(--border-thickness) solid var(--text-color-alt);background:#000;background:var(--background-color);animation:a .3s ease-out}.comment:target{border-color:#fff;border-color:var(--text-color);background:#111;background:var(--background-color-alt)}.comment-header{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;margin-bottom:.6rem;margin-bottom:calc(var(--line-height)/2);padding-bottom:.3rem;padding-bottom:calc(var(--line-height)/4);gap:1ch;border-bottom:2px solid #aaa;border-bottom:var(--border-thickness) solid var(--text-color-alt)}.comment-header-left{display:flex;flex-wrap:wrap;align-items:baseline;gap:1ch}.comment-header-right{display:flex;align-items:center}.comment-author{color:#fff;color:var(--text-color);font-weight:800;font-weight:var(--font-weight-bold)}.staff-badge{display:inline-block;margin-right:.5ch;padding:0 .5ch;background:#fff;background:var(--text-color);color:#000;color:var(--background-color);font-weight:600;font-weight:var(--font-weight-medium);font-size:.75rem;text-transform:uppercase}.comment-date{font-size:.875rem}.comment-date,.comment-edited{color:#aaa;color:var(--text-color-alt)}.comment-edited{font-style:italic;font-size:.75rem}.comment-content{margin:.6rem 0;margin:calc(var(--line-height)/2) 0;line-height:1.2rem;line-height:var(--line-height)}.comment-actions{display:flex;flex-wrap:nowrap;align-items:center;margin-top:.6rem;margin-top:calc(var(--line-height)/2);gap:1ch}.btn-approve,.btn-delete,.btn-reply{display:inline-block;padding:.3rem 1ch;padding:calc(var(--line-height)/4) 1ch;border:2px solid #fff;border:var(--border-thickness) solid var(--text-color);background:#000;background:var(--background-color);color:#fff;color:var(--text-color);font-weight:600;font-weight:var(--font-weight-medium);font-size:.875rem;line-height:1.2;font-family:JetBrains Mono Fast,monospace;font-family:var(--font-family);text-transform:uppercase;vertical-align:baseline;cursor:pointer}.btn-approve:hover,.btn-delete:hover,.btn-reply:hover{background:#fff;background:var(--text-color);color:#000;color:var(--background-color)}.btn-delete{border-color:#dc3545;color:#dc3545}.btn-delete:hover{background:#dc3545;color:#000;color:var(--background-color)}.btn-approve{border-color:#28a745;color:#28a745}.btn-approve:hover{background:#28a745;color:#000;color:var(--background-color)}.inline-form{display:inline-flex;align-items:center;margin:0;padding:0;vertical-align:baseline}.reply-form-container{padding:.6rem 2ch;padding:calc(var(--line-height)/2) 2ch;border:2px solid #aaa;border:var(--border-thickness) solid var(--text-color-alt);background:#111;background:var(--background-color-alt)}.replies,.reply-form-container{margin-top:.6rem;margin-top:calc(var(--line-height)/2)}.replies{margin-left:2ch;padding-left:2ch;border-left:4px solid #aaa;border-left:calc(var(--border-thickness)*2) solid var(--text-color-alt)}.reply{margin-bottom:.6rem;margin-bottom:calc(var(--line-height)/2);padding:.6rem 2ch;padding:calc(var(--line-height)/2) 2ch;border:2px solid #aaa;border:var(--border-thickness) solid var(--text-color-alt);background:#111;background:var(--background-color-alt)}.reply:target{border-color:#fff;border-color:var(--text-color);background:#000;background:var(--background-color)}.reply-depth-1{margin-left:0}.reply-depth-2{margin-left:1ch}.reply-depth-3{margin-left:2ch}.reply-depth-4{margin-left:3ch}.reply-depth-5,.reply-depth-6,.reply-depth-7,.reply-depth-8,.reply-depth-9{margin-left:4ch}.reply .replies{margin-left:1ch;padding-left:1ch}.reply-depth-3 .comment-content,.reply-depth-4 .comment-content,.reply-depth-5 .comment-content{font-size:.95rem}.reply-depth-6 .comment-content,.reply-depth-7 .comment-content,.reply-depth-8 .comment-content,.reply-depth-9 .comment-content{font-size:.9rem}.reply .comment-actions{flex-wrap:nowrap;min-height:1.8rem;min-height:calc(var(--line-height)*1.5)}.reply .btn-approve,.reply .btn-delete,.reply .btn-reply{display:inline-flex;align-items:center;justify-content:center;height:auto;min-height:1.44rem;min-height:calc(var(--line-height)*1.2);white-space:nowrap}.no-comments{padding:2.4rem 0;padding:calc(var(--line-height)*2) 0;color:#aaa;color:var(--text-color-alt);font-style:italic;text-align:center}.comment-votes{margin:0;gap:.3ch}.comment-votes,.vote-btn{display:inline-flex;align-items:center}.vote-btn{position:relative;justify-content:center;width:2pc;height:2pc;padding:0;border:none;border-radius:4px;background:transparent;color:#aaa;color:var(--text-color-alt);cursor:pointer;transition:all .15s ease}.vote-btn:hover:not([disabled]){background:#111;background:var(--background-color-alt);color:#fff;color:var(--text-color)}.vote-btn:active:not([disabled]){transform:scale(.95)}.vote-btn[disabled]{cursor:not-allowed;opacity:.4}.vote-btn.upvote.active{background:rgba(40,167,69,.1);color:#28a745}.vote-btn.upvote.active:hover{background:rgba(40,167,69,.15)}.vote-btn.downvote.active{background:rgba(220,53,69,.1);color:#dc3545}.vote-btn.downvote.active:hover{background:rgba(220,53,69,.15)}.vote-btn svg{width:20px;height:20px;stroke-width:2.5px;transition:transform .15s ease}.vote-btn.upvote:hover:not([disabled]) svg{transform:translateY(-2px)}.vote-btn.downvote:hover:not([disabled]) svg{transform:translateY(2px)}.vote-score{display:inline-flex;align-items:center;justify-content:center;min-width:2.5ch;height:2pc;padding:0 4px;color:#aaa;color:var(--text-color-alt);font-weight:800;font-weight:var(--font-weight-bold);font-size:1rem;line-height:2pc;text-align:center;transition:all .2s ease}.vote-score.is-animated{transform:scale(1.1)}.vote-score.positive{color:#28a745}.vote-score.negative{color:#dc3545}.reader-map-section{margin-top:2.4rem;margin-top:calc(var(--line-height)*2)}.reader-map-section summary{letter-spacing:0.5px;text-transform:uppercase}.blog-metadata .reader-map-section{margin:0;padding:0;border:0}.blog-metadata .reader-map-container{margin-top:0}.reader-map-container{margin-top:1.2rem;margin-top:var(--line-height);overflow:hidden;border:2px solid #fff;border:var(--border-thickness) solid var(--text-color);background:#000;background:var(--background-color)}.reader-map-container.is-hidden{display:none}.reader-map{width:100%;height:25pc}.reader-map,.reader-map.leaflet-container{background:#111;background:var(--background-color-alt)}.reader-map *+*{margin-top:0}.reader-map-info{padding:.6rem 1ch;padding:calc(var(--line-height)/2) 1ch;border-top:2px solid #fff;border-top:var(--border-thickness) solid var(--text-color);font-size:.8rem}.reader-map-info,.reader-map-note{color:#aaa;color:var(--text-color-alt)}.reader-map-note{display:block;margin-top:.3rem;margin-top:calc(var(--line-height)/4);font-size:.75rem}.reader-map-empty{margin-top:1.2rem;margin-top:var(--line-height);color:#aaa;color:var(--text-color-alt);font-style:italic}.reader-map-section[open] .reader-map-container{animation:a .3s ease}.reader-map .leaflet-control-zoom{display:none}.reader-map .leaflet-bar{border-radius:0;box-shadow:none}.reader-map .leaflet-control-zoom a{width:2.4rem;width:calc(var(--line-height)*2);height:2.4rem;height:calc(var(--line-height)*2);border:2px solid #fff;border:var(--border-thickness) solid var(--text-color);border-radius:0;background:#000;background:var(--background-color);color:#fff;color:var(--text-color);font-weight:800;font-weight:var(--font-weight-bold);font-size:1rem;line-height:2.4rem;line-height:calc(var(--line-height)*2);font-family:JetBrains Mono Fast,monospace;font-family:var(--font-family);text-indent:0}.reader-map .leaflet-control-zoom a:hover{background:#111;background:var(--background-color-alt)}.reader-map .leaflet-control-zoom-in{border-bottom:0}.reader-map .leaflet-control-attribution{border:2px solid #fff;border:var(--border-thickness) solid var(--text-color);border-right:0;border-bottom:0;background:#000;background:var(--background-color);color:#aaa;color:var(--text-color-alt);font-size:.7rem;font-family:JetBrains Mono Fast,monospace;font-family:var(--font-family)}.reader-map .leaflet-control-attribution a{color:#aaa;color:var(--text-color-alt)}@media (max-width:768px){.reader-map{height:350px}}@media (max-width:480px){.reader-map{height:300px}}.books-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));grid-gap:2rem;margin:15px 0 2.4rem;margin:15px 0 calc(var(--line-height)*2);padding:0;gap:2rem}.book-item{display:flex;flex-direction:column;margin-top:0!important;cursor:pointer;transition:transform .2s ease}.book-item:hover{transform:translateY(-4px)}.book-cover{position:relative;aspect-ratio:2/3;width:100%;margin-bottom:.6rem;margin-bottom:calc(var(--line-height)/2);overflow:hidden;border:2px solid #fff;border:var(--border-thickness) solid var(--text-color);background:#111;background:var(--background-color-alt)}.book-cover img{width:100%;height:100%;object-fit:cover;transition:opacity .2s ease}.book-item:hover .book-cover img{opacity:.95}.book-info{display:flex;flex:1;flex-direction:column}.book-title{display:-webkit-box;margin:0 0 .3rem!important;margin:0 0 calc(var(--line-height)/4)!important;overflow:hidden;font-weight:600;font-weight:var(--font-weight-medium);font-size:.875rem;line-height:1.2rem;line-height:var(--line-height);text-overflow:ellipsis;text-transform:none;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical}.book-author{margin:0 0 .6rem;margin:0 0 calc(var(--line-height)/2);font-size:.8rem}.book-author,.book-quote{color:#aaa;color:var(--text-color-alt)}.book-quote{flex-grow:1;margin:.6rem 0 0;margin:calc(var(--line-height)/2) 0 0;padding-left:1ch;border-left:2px solid #aaa;border-left:2px solid var(--text-color-alt);font-style:italic;font-size:.75rem;line-height:1.2rem;line-height:var(--line-height)}@media screen and (max-width:768px){.books-grid{grid-template-columns:repeat(auto-fill,minmax(90pt,1fr));gap:1.5rem}}@media screen and (max-width:480px){.books-grid{grid-template-columns:repeat(auto-fill,minmax(75pt,1fr));gap:1rem}.book-title{font-size:.8rem}.book-quote{font-size:.7rem}}@font-face{font-style:normal;font-weight:500;src:url("/static/aaronspindler/fonts/jetbrains-mono-regular-fast.bdfd60d163c3.woff2") format("woff2");font-family:JetBrains Mono Fast;font-display:swap}@font-face{font-style:normal;font-weight:600;src:url("/static/aaronspindler/fonts/jetbrains-mono-medium-fast.4395b76b3037.woff2") format("woff2");font-family:JetBrains Mono Fast;font-display:swap}@font-face{font-style:normal;font-weight:800;src:url("/static/aaronspindler/fonts/jetbrains-mono-bold-fast.2267adc02e0a.woff2") format("woff2");font-family:JetBrains Mono Fast;font-display:swap}:root{--kg-border:var(--background-color-alt);--kg-text:var(--text-color);--kg-bg:var(--background-color);--kg-node-stroke:3px;--kg-transition:all 0.2s ease}.knowledge-graph-section{margin:1rem 0 2rem}#knowledge-graph-container{position:relative;width:100%;height:25pc;margin-bottom:1rem;overflow:hidden;border:1px solid #111;border:1px solid var(--kg-border);border-radius:8px}#loading{display:none;z-index:10;position:absolute;top:50%;left:50%;padding:1rem;transform:translate(-50%,-50%);border-radius:8px;background:#000;background:var(--kg-bg);box-shadow:0 4px 9pt rgba(0,0,0,.1);color:#fff;color:var(--kg-text)}#knowledge-graph-svg{width:100%;height:100%;background:transparent}.node{cursor:pointer;transition:all .2s ease;transition:var(--kg-transition)}.node.highlighted,.node:hover{stroke-width:3px;stroke-width:var(--kg-node-stroke);stroke:#fff;stroke:var(--kg-text)}.node.highlighted{stroke:#ff6b6b}.node.blog-post.tech{filter:brightness(1.1)}.node.blog-post.personal{filter:brightness(1.15)}.node.blog-post.projects{filter:brightness(1.05)}.node.blog-post.guides{filter:brightness(1.1)}.node.blog-post.smart_home{filter:brightness(1.12)}.node.blog-post.reviews{filter:brightness(1.08)}.node.blog-post.tech:hover{filter:brightness(1.3)}.node.blog-post.personal:hover{filter:brightness(1.35)}.node.blog-post.projects:hover{filter:brightness(1.25)}.node.blog-post.guides:hover{filter:brightness(1.3)}.node.blog-post.smart_home:hover{filter:brightness(1.32)}.node.blog-post.reviews:hover{filter:brightness(1.28)}.link{transition:stroke-opacity .2s ease;stroke-linecap:round}.link.highlighted{stroke-opacity:1;stroke-width:3px}.link.external{stroke-dasharray:5,5;stroke-opacity:.8}.node-label{font:600 11px JetBrains Mono Fast,monospace;font:var(--font-weight-medium) 11px var(--font-family);text-anchor:middle;pointer-events:none;fill:#fff;stroke:#000;stroke-width:3px;stroke-linejoin:round;paint-order:stroke;stroke-opacity:.8}.node-label.blog-post-number{font-weight:700;font-size:13px;stroke-width:4px;letter-spacing:0.5px}.node-label.highlighted{fill:#ff6b6b;stroke:#000;stroke-width:3px}.svg-tooltip{pointer-events:none;transition:opacity .2s ease}.tooltip-background{fill:#000;fill:var(--kg-bg);stroke:#fff;stroke:var(--kg-text);stroke-width:1px;rx:4;opacity:.95}.svg-tooltip text{font:9pt JetBrains Mono Fast,monospace;font:9pt var(--font-family);fill:#fff;fill:var(--kg-text);text-anchor:middle;dominant-baseline:middle}.svg-tooltip.hidden{opacity:0}.svg-tooltip.visible{opacity:1}.category-hull{mix-blend-mode:screen;filter:blur(0.5px);pointer-events:none;transition:all .3s ease;stroke-width:2px;stroke-linejoin:round;opacity:.8}.category-label,.category-label-group{pointer-events:none}.category-label{font:700 1pc JetBrains Mono Fast,monospace;font:700 1pc var(--font-family);letter-spacing:1.5px;text-transform:uppercase;-webkit-user-select:none;-moz-user-select:none;user-select:none;text-anchor:middle;dominant-baseline:middle;fill:#fff;stroke:none;opacity:1}.controls-info{font-size:9pt;fill:#666;opacity:.7}@media (max-width:768px){#knowledge-graph-container{height:25pc}.node-label{font-size:10px}}.leaflet-image-layer,.leaflet-layer,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-pane,.leaflet-pane>canvas,.leaflet-pane>svg,.leaflet-tile,.leaflet-tile-container,.leaflet-zoom-box{position:absolute;top:0;left:0}.leaflet-container{overflow:hidden}.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-tile{-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-user-drag:none}.leaflet-tile::-moz-selection{background:transparent}.leaflet-tile::selection{background:transparent}.leaflet-safari .leaflet-tile{image-rendering:-webkit-optimize-contrast}.leaflet-safari .leaflet-tile-container{width:100pc;height:100pc;-webkit-transform-origin:0 0}.leaflet-marker-icon,.leaflet-marker-shadow{display:block}.leaflet-container .leaflet-overlay-pane svg{max-width:none!important;max-height:none!important}.leaflet-container .leaflet-marker-pane img,.leaflet-container .leaflet-shadow-pane img,.leaflet-container .leaflet-tile,.leaflet-container .leaflet-tile-pane img,.leaflet-container img.leaflet-image-layer{width:auto;max-width:none!important;max-height:none!important;padding:0}.leaflet-container img.leaflet-tile{mix-blend-mode:plus-lighter}.leaflet-container.leaflet-touch-zoom{touch-action:pan-x pan-y}.leaflet-container.leaflet-touch-drag{touch-action:none;touch-action:pinch-zoom}.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom{touch-action:none}.leaflet-container{-webkit-tap-highlight-color:transparent}.leaflet-container a{-webkit-tap-highlight-color:rgba(51,181,229,.4)}.leaflet-tile{visibility:hidden;filter:inherit}.leaflet-tile-loaded{visibility:inherit}.leaflet-zoom-box{box-sizing:border-box;z-index:800;width:0;height:0}.leaflet-overlay-pane svg{-moz-user-select:none}.leaflet-pane{z-index:400}.leaflet-tile-pane{z-index:200}.leaflet-overlay-pane{z-index:400}.leaflet-shadow-pane{z-index:500}.leaflet-marker-pane{z-index:600}.leaflet-tooltip-pane{z-index:650}.leaflet-popup-pane{z-index:700}.leaflet-map-pane canvas{z-index:100}.leaflet-map-pane svg{z-index:200}.leaflet-vml-shape{width:1px;height:1px}.leaflet-control{z-index:800;position:relative;pointer-events:visiblePainted;pointer-events:auto}.leaflet-bottom,.leaflet-top{z-index:1000;position:absolute;pointer-events:none}.leaflet-top{top:0}.leaflet-right{right:0}.leaflet-bottom{bottom:0}.leaflet-left{left:0}.leaflet-control{float:left;clear:both}.leaflet-right .leaflet-control{float:right}.leaflet-top .leaflet-control{margin-top:10px}.leaflet-bottom .leaflet-control{margin-bottom:10px}.leaflet-left .leaflet-control{margin-left:10px}.leaflet-right .leaflet-control{margin-right:10px}.leaflet-fade-anim .leaflet-popup{opacity:0;transition:opacity .2s linear}.leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}.leaflet-zoom-animated{transform-origin:0 0}svg.leaflet-zoom-animated{will-change:transform}.leaflet-zoom-anim .leaflet-zoom-animated{transition:transform .25s cubic-bezier(0,0,.25,1)}.leaflet-pan-anim .leaflet-tile,.leaflet-zoom-anim .leaflet-tile{transition:none}.leaflet-zoom-anim .leaflet-zoom-hide{visibility:hidden}.leaflet-interactive{cursor:pointer}.leaflet-grab{cursor:grab}.leaflet-crosshair,.leaflet-crosshair .leaflet-interactive{cursor:crosshair}.leaflet-control,.leaflet-popup-pane{cursor:auto}.leaflet-dragging .leaflet-grab,.leaflet-dragging .leaflet-grab .leaflet-interactive,.leaflet-dragging .leaflet-marker-draggable{cursor:move;cursor:grabbing}.leaflet-image-layer,.leaflet-marker-icon,.leaflet-marker-shadow,.leaflet-pane>svg path,.leaflet-tile-container{pointer-events:none}.leaflet-image-layer.leaflet-interactive,.leaflet-marker-icon.leaflet-interactive,.leaflet-pane>svg path.leaflet-interactive,svg.leaflet-image-layer.leaflet-interactive path{pointer-events:visiblePainted;pointer-events:auto}.leaflet-container{outline-offset:1px;background:#ddd}.leaflet-container a{color:#0078a8}.leaflet-zoom-box{border:2px dotted #38f;background:hsla(0,0%,100%,.5)}.leaflet-container{font-size:9pt;font-size:.75rem;line-height:1.5;font-family:Helvetica Neue,Arial,Helvetica,sans-serif}.leaflet-bar{border-radius:4px;box-shadow:0 1px 5px rgba(0,0,0,.65)}.leaflet-bar a{display:block;width:26px;height:26px;border-bottom:1px solid #ccc;background-color:#fff;color:#000;line-height:26px;text-align:center;-webkit-text-decoration:none;text-decoration:none}.leaflet-bar a,.leaflet-control-layers-toggle{display:block;background-position:50% 50%;background-repeat:no-repeat}.leaflet-bar a:focus,.leaflet-bar a:hover{background-color:#f4f4f4}.leaflet-bar a:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.leaflet-bar a:last-child{border-bottom:none;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.leaflet-bar a.leaflet-disabled{background-color:#f4f4f4;color:#bbb;cursor:default}.leaflet-touch .leaflet-bar a{width:30px;height:30px;line-height:30px}.leaflet-touch .leaflet-bar a:first-child{border-top-right-radius:2px;border-top-left-radius:2px}.leaflet-touch .leaflet-bar a:last-child{border-bottom-right-radius:2px;border-bottom-left-radius:2px}.leaflet-control-zoom-in,.leaflet-control-zoom-out{font:700 18px Lucida Console,Monaco,monospace;text-indent:1px}.leaflet-touch .leaflet-control-zoom-in,.leaflet-touch .leaflet-control-zoom-out{font-size:22px}.leaflet-control-layers{border-radius:5px;background:#fff;box-shadow:0 1px 5px rgba(0,0,0,.4)}.leaflet-control-layers-toggle{width:36px;height:36px;background-image:url("/static/photonfolio/leaflet/images/layers.a6137456ed16.png")}.leaflet-retina .leaflet-control-layers-toggle{background-image:url("/static/photonfolio/leaflet/images/layers-2x.4f0283c6ce28.png");background-size:26px 26px}.leaflet-touch .leaflet-control-layers-toggle{width:44px;height:44px}.leaflet-control-layers .leaflet-control-layers-list,.leaflet-control-layers-expanded .leaflet-control-layers-toggle{display:none}.leaflet-control-layers-expanded .leaflet-control-layers-list{display:block;position:relative}.leaflet-control-layers-expanded{padding:6px 10px 6px 6px;background:#fff;color:#333}.leaflet-control-layers-scrollbar{padding-right:5px;overflow-x:hidden;overflow-y:scroll}.leaflet-control-layers-selector{position:relative;top:1px;margin-top:2px}.leaflet-control-layers label{display:block;font-size:13px;font-size:1.08333em}.leaflet-control-layers-separator{height:0;margin:5px -10px 5px -6px;border-top:1px solid #ddd}.leaflet-default-icon-path{background-image:url("/static/photonfolio/leaflet/images/marker-icon.2273e3d8ad92.png")}.leaflet-container .leaflet-control-attribution{margin:0;background:#fff;background:hsla(0,0%,100%,.8)}.leaflet-control-attribution,.leaflet-control-scale-line{padding:0 5px;color:#333;line-height:1.4}.leaflet-control-attribution a{-webkit-text-decoration:none;text-decoration:none}.leaflet-control-attribution a:focus,.leaflet-control-attribution a:hover{-webkit-text-decoration:underline;text-decoration:underline}.leaflet-attribution-flag{display:inline!important;width:1em;height:.6669em;vertical-align:baseline!important}.leaflet-left .leaflet-control-scale{margin-left:5px}.leaflet-bottom .leaflet-control-scale{margin-bottom:5px}.leaflet-control-scale-line{box-sizing:border-box;padding:2px 5px 1px;border:2px solid #777;border-top:none;background:hsla(0,0%,100%,.8);line-height:1.1;text-shadow:1px 1px #fff;white-space:nowrap}.leaflet-control-scale-line:not(:first-child){margin-top:-2px;border-top:2px solid #777;border-bottom:none}.leaflet-control-scale-line:not(:first-child):not(:last-child){border-bottom:2px solid #777}.leaflet-touch .leaflet-bar,.leaflet-touch .leaflet-control-attribution,.leaflet-touch .leaflet-control-layers{box-shadow:none}.leaflet-touch .leaflet-bar,.leaflet-touch .leaflet-control-layers{border:2px solid rgba(0,0,0,.2);background-clip:padding-box}.leaflet-popup{position:absolute;margin-bottom:20px;text-align:center}.leaflet-popup-content-wrapper{padding:1px;border-radius:9pt;text-align:left}.leaflet-popup-content{min-height:1px;margin:13px 24px 13px 20px;font-size:13px;font-size:1.08333em;line-height:1.3}.leaflet-popup-content p{margin:1.3em 0}.leaflet-popup-tip-container{position:absolute;left:50%;width:40px;height:20px;margin-top:-1px;margin-left:-20px;overflow:hidden;pointer-events:none}.leaflet-popup-tip{width:17px;height:17px;margin:-10px auto 0;padding:1px;transform:rotate(45deg);pointer-events:auto}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:#fff;box-shadow:0 3px 14px rgba(0,0,0,.4);color:#333}.leaflet-container a.leaflet-popup-close-button{position:absolute;top:0;right:0;width:24px;height:24px;border:none;background:transparent;color:#757575;font:1pc/24px Tahoma,Verdana,sans-serif;text-align:center;-webkit-text-decoration:none;text-decoration:none}.leaflet-container a.leaflet-popup-close-button:focus,.leaflet-container a.leaflet-popup-close-button:hover{color:#585858}.leaflet-popup-scrolled{overflow:auto}.leaflet-oldie .leaflet-popup-content-wrapper{-ms-zoom:1}.leaflet-oldie .leaflet-popup-tip{width:24px;margin:0 auto;-ms-filter:"progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";filter:progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678,M12=0.70710678,M21=-0.70710678,M22=0.70710678)}.leaflet-oldie .leaflet-control-layers,.leaflet-oldie .leaflet-control-zoom,.leaflet-oldie .leaflet-popup-content-wrapper,.leaflet-oldie .leaflet-popup-tip{border:1px solid #999}.leaflet-div-icon{border:1px solid #666;background:#fff}.leaflet-tooltip{position:absolute;padding:6px;border:1px solid #fff;border-radius:3px;background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.4);color:#222;white-space:nowrap;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.leaflet-tooltip.leaflet-interactive{cursor:pointer;pointer-events:auto}.leaflet-tooltip-bottom:before,.leaflet-tooltip-left:before,.leaflet-tooltip-right:before,.leaflet-tooltip-top:before{position:absolute;border:6px solid transparent;background:transparent;content:"";pointer-events:none}.leaflet-tooltip-bottom{margin-top:6px}.leaflet-tooltip-top{margin-top:-6px}.leaflet-tooltip-bottom:before,.leaflet-tooltip-top:before{left:50%;margin-left:-6px}.leaflet-tooltip-top:before{bottom:0;margin-bottom:-9pt;border-top-color:#fff}.leaflet-tooltip-bottom:before{top:0;margin-top:-9pt;margin-left:-6px;border-bottom-color:#fff}.leaflet-tooltip-left{margin-left:-6px}.leaflet-tooltip-right{margin-left:6px}.leaflet-tooltip-left:before,.leaflet-tooltip-right:before{top:50%;margin-top:-6px}.leaflet-tooltip-left:before{right:0;margin-right:-9pt;border-left-color:#fff}.leaflet-tooltip-right:before{left:0;margin-left:-9pt;border-right-color:#fff}@media print{.leaflet-control{-webkit-print-color-adjust:exact;print-color-adjust:exact}}.lighthouse-summary{margin:2rem 0}.lighthouse-scores{display:flex;flex-wrap:nowrap;align-items:flex-start;justify-content:space-between;margin:1.5rem 0;gap:1rem}.score-card{box-sizing:border-box;flex:1;flex-direction:column;align-self:flex-start;min-width:0;height:90pt;min-height:90pt;margin-top:0!important;padding:1.5rem 1rem;border:1px solid #e0e0e0;border:1px solid var(--border-color,#e0e0e0);border-radius:8px;background:#f9f9f9;background:var(--card-bg,#f9f9f9);text-align:center}.score-card,.score-value{display:flex;align-items:center;justify-content:center}.score-value{width:100%;height:3rem;margin:0 0 .5rem;font-weight:700;font-size:2.5rem;line-height:1;font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}.score-value.score-good{color:#0cce6b}.score-value.score-average{color:#ffa400}.score-value.score-poor{color:#ff4e42}.score-label{display:block;margin:0;color:#666;color:var(--text-secondary,#666);font-size:.875rem;line-height:1.2;white-space:nowrap}.lighthouse-chart{margin:3rem 0}.lighthouse-chart canvas{max-width:100%;height:auto}.lighthouse-table{margin:3rem 0}.lighthouse-table table{width:100%;margin:1rem 0;border-collapse:collapse}.lighthouse-table td,.lighthouse-table th{padding:.75rem;border-bottom:1px solid #e0e0e0;border-bottom:1px solid var(--border-color,#e0e0e0);text-align:left}.lighthouse-table th{background:#e0e0e0;background:var(--table-header-bg,#e0e0e0);color:#333;color:var(--text-primary,#333);font-weight:700}@media (max-width:768px){.lighthouse-scores{flex-wrap:wrap}.score-card{flex:0 0 calc(50% - 0.5rem);height:75pt;min-height:75pt}.score-value{height:2.5rem;font-size:2rem}.lighthouse-table{overflow-x:auto}}.download-all-button{display:inline-flex;flex-shrink:0;align-items:center;height:auto;margin:0;padding:calc(.6rem - 2px) calc(1ch - 2px);padding:calc(var(--line-height)/2 - var(--border-thickness)) calc(1ch - var(--border-thickness));gap:.5ch;border:2px solid #fff;border:var(--border-thickness) solid var(--text-color);background:#000;background:var(--background-color);color:#fff;color:var(--text-color);font:inherit;font-weight:600;font-weight:var(--font-weight-medium);font-size:.9rem;line-height:1.2rem;line-height:var(--line-height);-webkit-text-decoration:none;text-decoration:none;text-transform:uppercase;white-space:nowrap;cursor:pointer}.download-all-button{margin-top:0;font-size:.8rem}.download-all-button:hover{background:#111;background:var(--background-color-alt)}.download-all-button:active{transform:translate(1px,1px)}.download-all-button svg{flex-shrink:0;width:1em;height:1em}.back-link{display:inline-block;margin-bottom:20px;color:#666;-webkit-text-decoration:none;text-decoration:none}.back-link:hover{-webkit-text-decoration:underline;text-decoration:underline}.photo-albums-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));grid-gap:15px;margin-top:15px;gap:15px}.photo-album-card{position:relative;aspect-ratio:1;margin-top:0!important;overflow:hidden;border:3px solid #fff;border-radius:4px;background:#f0f0f0;box-shadow:0 2px 4px rgba(0,0,0,.1);transition:transform .2s}.photo-album-card:hover{transform:scale(1.05);box-shadow:0 4px 8px rgba(0,0,0,.15)}.photo-album-card img,.photo-album-cover{width:100%;height:100%;object-fit:cover}.photo-album-overlay{position:absolute;right:0;bottom:0;left:0;padding:10px;background:linear-gradient(0deg,rgba(0,0,0,.8),transparent);color:#fff}.photo-album-title{margin:0!important;font-weight:400;font-size:.9em}.photo-album-count{font-size:.75em;opacity:.8}.album-header{margin-bottom:30px;padding-bottom:20px;border-bottom:1px solid #ddd}.album-header-top{display:flex;align-items:flex-start;justify-content:space-between;margin:0;gap:1ch}.album-title{margin:0 0 10px}.album-description{margin:0;color:#666}.album-meta{margin-top:10px;color:#999;font-size:.9em}.photos-grid{display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:200px;grid-auto-flow:dense;grid-gap:8px;align-items:stretch;margin-top:30px;gap:8px}@media (max-width:1200px){.photos-grid{grid-template-columns:repeat(3,1fr);grid-auto-rows:180px}}@media (max-width:768px){.photos-grid{grid-template-columns:repeat(2,1fr);grid-auto-rows:150px}}@media (max-width:480px){.photos-grid{grid-template-columns:1fr;grid-auto-rows:minmax(200px,auto)}.photo-item{aspect-ratio:4/3}}.photo-item{position:relative;margin-top:0!important;overflow:hidden;border-radius:4px;background:#000;box-shadow:0 2px 8px rgba(0,0,0,.1);cursor:pointer;transition:transform .2s,box-shadow .2s}.photo-item.featured{grid-row:span 2;grid-column:span 2}@media (max-width:480px){.photo-item.featured{grid-row:span 1;grid-column:span 1}}.photo-item .photo-placeholder{z-index:1;position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;transform:scale(1.1);filter:blur(20px);transition:opacity .4s ease-out}.photo-item:hover{transform:translateY(-4px);box-shadow:0 4px 1pc rgba(0,0,0,.15)}.photo-item img{display:block;position:absolute;top:0;left:0;width:100%;height:100%;margin:0;object-fit:cover;transition:transform .3s,opacity .4s ease-out}.photo-item .photo-grid-image{z-index:2;opacity:0}.photo-item.loaded .photo-grid-image{opacity:1}.photo-item.loaded .photo-placeholder{opacity:0;pointer-events:none}.photo-item.loaded:hover .photo-grid-image{transform:scale(1.03)}.photo-title{position:absolute;right:0;bottom:0;left:0;padding:15px 9pt 9pt;background:linear-gradient(0deg,rgba(0,0,0,.8),rgba(0,0,0,.4) 40%,transparent);font-weight:500;font-size:.85em;opacity:0;transition:opacity .3s}.photo-item:hover .photo-title{opacity:1}.photo-item:nth-child(n+9){contain-intrinsic-size:200px;content-visibility:auto}.album-map-container{position:relative;margin:1.2rem 0 2.4rem;margin:var(--line-height) 0 calc(var(--line-height)*2);overflow:hidden;border:2px solid #fff;border:var(--border-thickness) solid var(--text-color)}.album-map{background:#111;background:var(--background-color-alt)}.album-map,.album-map.leaflet-container{width:100%;height:25pc}.album-map-info{margin:0;padding:.6rem 1ch;padding:calc(var(--line-height)/2) 1ch;border-top:2px solid #fff;border-top:var(--border-thickness) solid var(--text-color);background:#000;background:var(--background-color);color:#aaa;color:var(--text-color-alt);font-size:.8rem}.photo-map-marker{width:24px!important;height:24px!important;transform:rotate(-45deg);border:2px solid #000;border:var(--border-thickness) solid var(--background-color);border-radius:50% 50% 50% 0;background:#fff;background:var(--text-color);box-shadow:0 2px 4px rgba(0,0,0,.3)}.photo-map-marker:after{position:absolute;top:50%;left:50%;width:8px;height:8px;transform:translate(-50%,-50%);border-radius:50%;background:#000;background:var(--background-color);content:""}.photo-map-popup .leaflet-popup-content-wrapper{padding:0;border:2px solid #fff;border:var(--border-thickness) solid var(--text-color);border-radius:0;background:#000;background:var(--background-color);color:#fff;color:var(--text-color);font-family:JetBrains Mono Fast,monospace;font-family:var(--font-family)}.photo-map-popup .leaflet-popup-tip{background:#fff;background:var(--text-color)}.photo-map-popup .leaflet-popup-content{margin:0;padding:0}.map-popup{width:150px;cursor:pointer}.map-popup img{display:block;width:100%;height:75pt;margin:0;object-fit:cover}.map-popup-caption{margin:0;padding:.3rem .5ch;padding:calc(var(--line-height)/4) .5ch;overflow:hidden;font-size:.75rem;text-overflow:ellipsis;white-space:nowrap}.album-map .leaflet-control-zoom a{width:2.4rem;width:calc(var(--line-height)*2);height:2.4rem;height:calc(var(--line-height)*2);border:2px solid #fff;border:var(--border-thickness) solid var(--text-color);border-radius:0;background:#000;background:var(--background-color);color:#fff;color:var(--text-color);font-weight:800;font-weight:var(--font-weight-bold);line-height:2.4rem;line-height:calc(var(--line-height)*2);font-family:JetBrains Mono Fast,monospace;font-family:var(--font-family)}.album-map .leaflet-control-zoom a:hover{background:#111;background:var(--background-color-alt)}.album-map .leaflet-control-zoom-in{border-bottom:none!important}.album-map .leaflet-control-attribution{background:#000;background:var(--background-color);color:#aaa;color:var(--text-color-alt);font-size:.6rem;font-family:JetBrains Mono Fast,monospace;font-family:var(--font-family)}.album-map .leaflet-control-attribution a{color:#fff;color:var(--text-color)}@media (max-width:768px){.album-map{height:350px}}@media (max-width:480px){.album-map{height:300px}}.photo-map-marker{box-shadow:0 2px 4px rgba(0,0,0,.5)}.photo-detail-container{max-width:75pc;margin:0 auto}.photo-display{display:flex;position:relative;align-items:center;justify-content:center;margin-bottom:30px}.photo-display img{width:auto;max-width:100%;height:auto;max-height:70vh;object-fit:contain;border-radius:4px;box-shadow:0 4px 9pt rgba(0,0,0,.15)}.photo-display iframe{aspect-ratio:16/9;width:min(100%,60pc);border:0;border-radius:4px;box-shadow:0 4px 9pt rgba(0,0,0,.15)}@media (max-width:768px){.photo-display img{max-height:60vh}}.photo-display .photo-placeholder{transform:scale(1.1);filter:blur(20px);transition:opacity .4s ease-out}.photo-display .photo-main-image{position:absolute;top:0;left:50%;transform:translateX(-50%);opacity:0;transition:opacity .4s ease-out}.photo-display.loaded .photo-main-image{position:relative;left:auto;transform:none;opacity:1}.photo-display.loaded .photo-placeholder{position:absolute;top:0;left:50%;transform:translateX(-50%) scale(1.1);opacity:0;pointer-events:none}.photo-metadata{display:grid;grid-template-columns:1fr 1fr;grid-gap:30px;margin-bottom:30px;gap:30px}@media (max-width:768px){.photo-metadata{grid-template-columns:1fr;gap:20px}}.metadata-section{padding:20px;border:1px solid #ddd;border:1px solid var(--hairline-color,#ddd);border-radius:4px;background:#111;background:var(--background-color-alt,#f9f9f9)}.photo-metadata .metadata-section{grid-column:span 2}@media (max-width:768px){.photo-metadata .metadata-section{grid-column:span 1}}.metadata-section h3{margin:0 0 15px;color:#fff;color:var(--text-color,#333);font-weight:600;font-size:1.1em}.metadata-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));grid-gap:1pc;gap:1pc}.metadata-item{margin-bottom:9pt}.metadata-grid .metadata-item,.metadata-item:last-child{margin-bottom:0}.metadata-label{margin-bottom:4px;color:#aaa;color:var(--text-color-alt,#666);font-size:.85em;letter-spacing:0.5px;text-transform:uppercase}.metadata-value{font-weight:500;font-size:1em}.ai-caption,.metadata-value{color:#fff;color:var(--text-color,#333)}.ai-caption{margin-top:8px;font-style:italic;line-height:1.6}.ai-caption+.ai-caption{margin-top:9pt}.photo-title{margin:0 0 10px;color:#fff;color:var(--text-color,#333);font-weight:600;font-size:1.5em}.photo-filename{margin-bottom:20px;color:#aaa;color:var(--text-color-alt,#666);font-size:.9em}