@import url(https://fonts.googleapis.com/css2?family=Amaranth:wght@400;700&family=Open+Sans:wght@400;500;700&display=swap);*{box-sizing:border-box;font-size:15px;margin:0;padding:0}#root{position:relative}html{scroll-behavior:smooth}:root{--main-colour:#1e1e1e;--disabled-colour:#282832;--text-colour:#d4d4d4;--secondary-colour:#9cdcfe;--tertiary-colour:#dcdcaa;--title-font:"Amaranth",sans-serif;--text-font:"Open Sans",sans-serif;--standard-radius:8px;--surface-1:#232329;--surface-2:#282832;--surface-3:#2f2f3a;--border-colour:#3a3a46;--border-soft:#2a2a33;--muted-colour:#9a9aa4;--dim-colour:#77777f;--sev-critical:#f44747;--sev-high:#ce9178;--sev-medium:#dcdcaa;--sev-low:#6a9955;--control-height:42px;--ease-out:cubic-bezier(.22,1,.36,1)}img{height:auto;object-fit:cover;-webkit-user-select:none;user-select:none;width:100%}.d-text{font-family:Open Sans,sans-serif;font-family:var(--text-font);font-size:1.2rem}.d-text,.d-title{color:#d4d4d4;color:var(--text-colour)}.d-title{font-family:Amaranth,sans-serif;font-family:var(--title-font);font-size:2.5rem}.d-button{color:#d4d4d4;color:var(--text-colour);cursor:pointer;flex-direction:row;font-family:Open Sans,sans-serif;font-family:var(--text-font);font-size:1.1rem;position:relative;text-decoration:none}.d-button .underline{background-color:#9cdcfe;background-color:var(--secondary-colour);bottom:0;content:"";height:2px;left:0;position:absolute;transition:width .2s ease-in-out;width:0}.d-button:hover .underline{width:100%}.fcc{justify-content:center}.fcc,.fcs{align-items:center;display:flex}.fcs{justify-content:flex-start}.fss{justify-content:flex-start}.fsc,.fss{align-items:flex-start;display:flex}.fsc{justify-content:center}.fcb{align-items:center;display:flex;justify-content:space-between}.content{background:#1e1e1e;background:var(--main-colour);overflow-x:clip;position:relative;width:100%}.page-wrap,.wrap{margin:0 auto;width:min(1140px,100% - 3rem)}.page-wrap{padding:45px 0 80px}.page-wrap .d-title{margin-bottom:18px}.page-wrap .intro{color:#9a9aa4;color:var(--muted-colour);margin-bottom:26px;max-width:640px}.card-grid,.card-list{grid-gap:16px;align-items:stretch;display:grid;gap:16px;width:100%}.card-grid{grid-template-columns:repeat(2,1fr)}.card-list{grid-template-columns:1fr}.empty{border:1px dashed #3a3a46;border:1px dashed var(--border-colour);border-radius:8px;border-radius:var(--standard-radius);color:#9a9aa4;color:var(--muted-colour);grid-column:1/-1;padding:60px 0;text-align:center;width:100%}.cmd{color:#77777f;color:var(--dim-colour);font-family:Open Sans,sans-serif;font-family:var(--text-font);font-size:1rem;margin-bottom:10px}.cmd .prompt{color:#9cdcfe;color:var(--secondary-colour)}.card{background:#232329;background:var(--surface-1);border:1px solid #3a3a46;border:1px solid var(--border-colour);border-radius:8px;border-radius:var(--standard-radius);padding:20px 22px;text-decoration:none;transition:border-color .2s cubic-bezier(.22,1,.36,1),background .2s cubic-bezier(.22,1,.36,1),transform .2s cubic-bezier(.22,1,.36,1);transition:border-color .2s var(--ease-out),background .2s var(--ease-out),transform .2s var(--ease-out)}.card:hover{background:#282832;background:var(--surface-2);border-color:#9cdcfe;border-color:var(--secondary-colour);transform:translateY(-2px)}.card .arrow{color:#77777f;color:var(--dim-colour);flex-shrink:0;font-size:1.3rem;transition:color .2s cubic-bezier(.22,1,.36,1),transform .2s cubic-bezier(.22,1,.36,1);transition:color .2s var(--ease-out),transform .2s var(--ease-out)}.card:hover .arrow{color:#9cdcfe;color:var(--secondary-colour);transform:translateX(3px)}.card.static,.card.static:hover{background:#232329;background:var(--surface-1);border-color:#3a3a46;border-color:var(--border-colour);cursor:default;transform:none}.badge{border:1px solid #3a3a46;border:1px solid var(--border-colour);border-radius:5px;color:#9a9aa4;color:var(--muted-colour);font-family:Open Sans,sans-serif;font-family:var(--text-font);font-size:.85rem;font-weight:500;padding:3px 9px;white-space:nowrap}.badge.critical{background:#f447471f;border-color:#f44747;border-color:var(--sev-critical);color:#f44747;color:var(--sev-critical)}.badge.high{background:#ce91781f;border-color:#ce9178;border-color:var(--sev-high);color:#ce9178;color:var(--sev-high)}.badge.medium{background:#dcdcaa1a;border-color:#dcdcaa;border-color:var(--sev-medium);color:#dcdcaa;color:var(--sev-medium)}.badge.low{background:#6a99551f;border-color:#6a9955;border-color:var(--sev-low);color:#6a9955;color:var(--sev-low)}.badge.accent{background:#9cdcfe1a;border-color:#9cdcfe;border-color:var(--secondary-colour);color:#9cdcfe;color:var(--secondary-colour)}.badge.gold{background:#dcdcaa1a;border-color:#dcdcaa;border-color:var(--tertiary-colour);color:#dcdcaa;color:var(--tertiary-colour)}@media screen and (max-width:1025px){:root{font-size:14px}}@media screen and (max-width:768px){:root{font-size:13px}.page-wrap,.wrap{width:min(1140px,100% - 2rem)}.page-wrap{padding:35px 0 60px}.card-grid{grid-template-columns:1fr}.card{padding:16px 18px}}.loading{color:#77777f;color:var(--dim-colour);padding:40px 0}.error{flex-direction:column;height:100vh}.error .d-button{margin:10px 0}.error p{margin:10px}.writeup{flex-direction:column;min-height:100vh}.navigation-bar{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:var(--main-colour);background:color-mix(in srgb,var(--main-colour) 85%,#0000);border-bottom:1px solid var(--border-soft);height:60px;position:sticky;top:0;width:100%;z-index:20}.navigation-bar .bar{gap:20px;height:100%}.navigation-bar .brand{color:var(--text-colour);font-family:var(--text-font);font-size:1rem;font-weight:700;text-decoration:none;white-space:nowrap}.navigation-bar .brand .prompt{color:var(--secondary-colour);font-size:inherit}.navigation-bar .hamburger{background:none;border:none;color:var(--text-colour);cursor:pointer;font-size:1.3rem;padding:6px;transition:color .2s var(--ease-out)}.navigation-bar .hamburger:hover{color:var(--secondary-colour)}.navigation-bar .hamburger svg{display:block}@media screen and (max-width:900px){.navigation-bar .links{gap:18px}.navigation-bar .links .link{font-size:.9rem}}@media screen and (max-width:480px){.navigation-bar .brand{font-size:.95rem}}.nav-bar{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:color-mix(in srgb,var(--main-colour) 94%,#0000);bottom:0;left:0;position:fixed;right:0;top:60px;z-index:15}.nav-bar .links{flex-direction:column;gap:26px;height:100%;width:100%}.nav-bar .links .link{border-bottom:1px solid #0000;color:var(--muted-colour);font-family:var(--text-font);font-size:1.5rem;padding:4px 2px;text-decoration:none;transition:color .2s var(--ease-out),border-color .2s var(--ease-out)}.nav-bar .links .link.active,.nav-bar .links .link:hover{border-color:var(--secondary-colour);color:var(--text-colour)}.navigation-bar .links{flex-wrap:wrap;gap:26px}.navigation-bar .links .link{color:var(--muted-colour);font-family:var(--text-font);font-size:.95rem;padding:5px 0;position:relative;text-decoration:none;transition:color .2s var(--ease-out);white-space:nowrap}.navigation-bar .links .link .underline{background:var(--secondary-colour);bottom:0;height:1px;left:0;position:absolute;transition:width .2s var(--ease-out);width:0}.navigation-bar .links .link.active,.navigation-bar .links .link:hover{color:var(--text-colour)}.navigation-bar .links .link.active .underline,.navigation-bar .links .link:hover .underline{width:100%}.site-footer{background:var(--main-colour);border-top:1px solid var(--border-soft);padding:32px 0;width:100%}.site-footer .bar{flex-wrap:wrap;gap:16px 24px}.site-footer .links{flex-wrap:wrap;gap:8px 22px}.site-footer .links .link{color:var(--muted-colour);font-family:var(--text-font);font-size:.95rem;text-decoration:none;transition:color .2s var(--ease-out)}.site-footer .links .link:hover{color:var(--secondary-colour)}.site-footer .socials{gap:14px}.site-footer .socials a{color:var(--muted-colour);display:flex;transition:color .2s var(--ease-out),transform .2s var(--ease-out)}.site-footer .socials a:hover{color:var(--secondary-colour);transform:translateY(-2px)}.site-footer .socials a svg{display:block;font-size:1.25rem}.site-footer .copyright{color:var(--dim-colour);font-family:var(--text-font);font-size:.9rem}@media screen and (max-width:640px){.site-footer .bar{align-items:flex-start;flex-direction:column;gap:18px}.site-footer .socials{justify-content:flex-start}}.card.row{gap:16px}.card.stack{flex-direction:column;gap:10px;height:100%}.card .main{flex:1 1;gap:14px;min-width:0}.card.stack .main{align-items:flex-start;width:100%}.card .body{flex-direction:column;gap:6px;min-width:0}.card .heading{flex-wrap:wrap;gap:9px}.card .title{color:var(--text-colour);font-size:1.35rem;font-weight:700}.card .meta{color:var(--muted-colour);flex-wrap:wrap;font-family:var(--text-font);font-size:1rem;gap:9px}.card .description{color:var(--dim-colour);font-size:1.05rem;line-height:1.55;text-align:justify}.card .foot{gap:12px;margin-top:auto;padding-top:6px;width:100%}.card .foot-left{gap:8px;min-width:0}.card .action{color:var(--muted-colour);flex-shrink:0;font-family:var(--text-font);gap:7px}.card .action,.card .action .arrow{font-size:1rem}.card:hover .action,.card:hover .title{color:var(--secondary-colour)}.card.static:hover .action,.card.static:hover .title{color:var(--text-colour)}.card.static:hover .action{color:var(--muted-colour)}.card .media{aspect-ratio:16/9;background:var(--surface-3);border-radius:var(--standard-radius);flex-shrink:0;overflow:hidden;width:100%}.card .media img{display:block;height:100%;object-fit:cover;width:100%}.card .tile{background:var(--surface-3);border:1px solid var(--border-colour);border-radius:var(--standard-radius);flex-shrink:0;height:46px;overflow:hidden;padding:6px;transition:border-color .2s var(--ease-out);width:46px}.card:hover .tile{border-color:var(--secondary-colour)}.card.static:hover .tile{border-color:var(--border-colour)}.card .tile.light{background:#fff}.card .tile img{display:block;height:100%;object-fit:contain;width:100%}.card .tile b{color:var(--muted-colour);font-family:var(--text-font);font-size:1rem}.card .description code{background:var(--surface-3);border-radius:4px;color:var(--tertiary-colour);font-family:monospace;font-size:.95em;padding:2px 6px}@media screen and (max-width:768px){.card .title{font-size:1.2rem}.card .tile{height:40px;width:40px}.card .description{text-align:left}}.card .rail{color:var(--secondary-colour);flex-shrink:0;font-family:var(--text-font);font-size:1rem;padding-top:2px;white-space:nowrap}.filter-bar{background:var(--surface-1);border:1px solid var(--border-colour);border-radius:var(--standard-radius);margin-bottom:25px;padding:14px 15px;width:100%}.filter-bar .filter-row{flex-wrap:wrap;gap:10px}.filter-bar .search-box{background:var(--main-colour);border:1px solid var(--border-colour);border-radius:var(--standard-radius);flex:1 1 320px;gap:8px;height:var(--control-height);min-width:240px;padding:0 12px;transition:border-color .2s var(--ease-out)}.filter-bar .search-box:focus-within{border-color:var(--secondary-colour)}.filter-bar .search-box svg{color:var(--dim-colour);flex-shrink:0}.filter-bar .search-box:focus-within svg{color:var(--secondary-colour)}.filter-bar .search-box input{background:#0000;border:none;color:var(--text-colour);flex:1 1;font-family:var(--text-font);font-size:1.1rem;min-width:0;outline:none}.filter-bar .reset,.filter-bar .search-box input::placeholder{color:var(--dim-colour)}.filter-bar .reset{background:none;border:none;cursor:pointer;font-family:var(--text-font);font-size:1rem;padding:5px;text-decoration:underline}.filter-bar .reset:hover{color:var(--secondary-colour)}.filter-bar .count{color:var(--dim-colour);font-family:var(--text-font);font-size:1rem;margin-left:auto;white-space:nowrap}.filter-bar .count b{color:var(--secondary-colour);font-weight:500}@media screen and (max-width:768px){.filter-bar .filter-row{align-items:stretch;flex-direction:column}.filter-bar .search-box{flex:1 1 auto}.filter-bar .count{margin-left:0;text-align:right}}.dropdown{flex-shrink:0;position:relative}.dropdown .dropdown-button{background:var(--main-colour);border:1px solid var(--border-colour);border-radius:var(--standard-radius);color:var(--text-colour);cursor:pointer;font-family:var(--text-font);font-size:1rem;gap:10px;height:var(--control-height);min-width:175px;padding:0 14px;transition:border-color .2s var(--ease-out)}.dropdown .dropdown-button:hover{border-color:var(--secondary-colour)}.dropdown .dropdown-button .selected{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dropdown .dropdown-button .placeholder{color:var(--muted-colour)}.dropdown .dropdown-button .caret{color:var(--dim-colour);flex-shrink:0;transition:transform .2s var(--ease-out),color .2s var(--ease-out)}.dropdown .dropdown-button .caret.open{color:var(--secondary-colour);transform:rotate(180deg)}.dropdown .dropdown-panel{background:var(--surface-1);border:1px solid var(--border-colour);border-radius:var(--standard-radius);left:0;max-width:320px;min-width:100%;padding:7px;position:absolute;top:calc(100% + 6px);width:max-content;z-index:10}.dropdown .dropdown-search{background:var(--main-colour);border:1px solid var(--border-colour);border-radius:5px;gap:7px;height:32px;margin-bottom:7px;padding:0 9px}.dropdown .dropdown-search:focus-within{border-color:var(--secondary-colour)}.dropdown .dropdown-search svg{color:var(--dim-colour);flex-shrink:0}.dropdown .dropdown-search input{background:#0000;border:none;color:var(--text-colour);flex:1 1;font-family:var(--text-font);font-size:1rem;min-width:0;outline:none}.dropdown .dropdown-search input::placeholder{color:var(--dim-colour)}.dropdown .dropdown-list{list-style:none;max-height:230px;overflow-y:auto}.dropdown .dropdown-option{border-radius:5px;color:var(--muted-colour);cursor:pointer;font-family:var(--text-font);font-size:1rem;padding:7px 10px;white-space:nowrap}.dropdown .dropdown-option:hover{background:var(--surface-3);color:var(--text-colour)}.dropdown .dropdown-option.selected{color:var(--secondary-colour)}.dropdown .dropdown-empty{color:var(--dim-colour);font-family:var(--text-font);font-size:1rem;padding:10px}@media screen and (max-width:768px){.dropdown,.dropdown .dropdown-button{width:100%}}.projects-page{flex-direction:column;min-height:100vh}.skill svg{color:var(--text-colour);font-size:2rem;margin-right:20px}@media screen and (max-width:768px){.skill svg{margin-top:20px}}.about{min-height:100vh}.about .hero{overflow:clip;padding:clamp(40px,6vw,64px) 0 clamp(32px,4vw,48px);position:relative}.about .hero .inner{grid-gap:clamp(2rem,5vw,3.5rem);align-items:center;display:grid;gap:clamp(2rem,5vw,3.5rem);grid-template-columns:minmax(0,1fr) auto;position:relative}.about .hero .intro{--name-size:clamp(1.9rem,5.2vw,3.4rem);flex-direction:column}.about .hero .shell{color:var(--muted-colour);font-family:var(--text-font);font-size:1rem;margin-bottom:20px}.about .hero .shell .user{color:var(--secondary-colour)}.about .hero .shell .caret{animation:caret-blink 1.1s step-end infinite;background:var(--secondary-colour);display:inline-block;height:1.05em;margin-left:4px;vertical-align:-2px;width:8px}@keyframes caret-blink{0%,55%{opacity:1}56%,to{opacity:0}}.about .hero .name{font-size:var(--name-size);font-weight:700;letter-spacing:-.03em;line-height:1.03}.about .hero .role{color:var(--dim-colour);font-family:var(--text-font);font-size:max(1.05rem,calc(var(--name-size)*.31));font-weight:400;letter-spacing:0;line-height:1.4;margin-top:14px}.about .hero .bio{color:var(--muted-colour);font-family:var(--text-font);font-size:1.15rem;line-height:1.6;margin-top:20px;max-width:66ch}.about .hero .actions{flex-direction:row;flex-wrap:wrap;gap:11px;margin-top:28px}.about .hero .action{background:var(--surface-1);border:1px solid var(--border-colour);border-radius:var(--standard-radius);color:var(--text-colour);font-family:var(--text-font);font-size:1.05rem;height:var(--control-height);padding:0 18px;text-decoration:none;transition:border-color .2s var(--ease-out),color .2s var(--ease-out),background .2s var(--ease-out);white-space:nowrap}.about .hero .action:hover{border-color:var(--secondary-colour);color:var(--secondary-colour)}.about .hero .action.solid{background:var(--secondary-colour);border-color:var(--secondary-colour);color:var(--main-colour);font-weight:700}.about .hero .action.solid:hover{background:var(--text-colour);border-color:var(--text-colour);color:var(--main-colour)}.about .hero .socials{flex-direction:row;gap:2px;margin-left:6px}.about .hero .socials a{border-radius:5px;color:var(--muted-colour);display:block;padding:7px;transition:color .2s var(--ease-out),transform .2s var(--ease-out)}.about .hero .socials a:hover{color:var(--secondary-colour);transform:translateY(-2px)}.about .hero .socials a svg{display:block;font-size:1.35rem}.about .hero .avatar{aspect-ratio:1/1;isolation:isolate;justify-self:center;position:relative;width:clamp(180px,28vw,300px)}.about .hero .avatar:after{background:radial-gradient(closest-side at 50% 46%,color-mix(in srgb,var(--secondary-colour) 18%,#0000) 0,#0000 72%);border-radius:50%;content:"";filter:blur(18px);inset:-8%;position:absolute;z-index:-1}.about .hero .avatar>span{border-radius:50%;display:block!important;height:100%;overflow:hidden;width:100%}.about .hero .avatar img{border:2px solid var(--tertiary-colour);border-radius:50%;box-sizing:border-box;height:100%;object-fit:cover;width:100%}@media screen and (max-width:900px){.about .hero .inner{gap:2rem;grid-template-columns:1fr;justify-items:center}.about .hero .avatar{order:-1}.about .hero .intro{align-items:center;text-align:center}.about .hero .bio{margin-left:auto;margin-right:auto;text-align:justify;text-align-last:center}.about .hero .actions{justify-content:center}}@media screen and (max-width:640px){.about .hero .bio{font-size:1.05rem}.about .hero .actions .action{padding:0 15px}}.abilities{border-bottom:1px solid var(--border-soft);border-top:1px solid var(--border-soft);padding:26px 0;width:100%}.abilities .ability-container{grid-gap:24px;align-items:start;display:grid;gap:24px;grid-template-columns:repeat(3,1fr)}@media screen and (max-width:900px){.abilities .ability-container{justify-items:center}.abilities .ability{align-items:center;text-align:center}}@media screen and (max-width:640px){.abilities{padding:22px 0}.abilities .ability-container{gap:18px;grid-template-columns:1fr}}.ability{flex-direction:column;gap:3px}.ability .number{color:var(--secondary-colour);font-family:var(--title-font);font-size:2.1rem;font-weight:700;line-height:1.1}.ability .description{color:var(--dim-colour);font-size:1rem}.certification .show-more,.cve .show-more{margin-top:18px}.builder-container{flex-direction:column;min-height:100vh;padding:80px 0 50px;width:100vw}.command-builder-title{margin:50px 0}.builder-description{margin-bottom:50px;width:80%}.command-builder{border:2px solid var(--tertiary-colour);border-radius:8px;flex-direction:column;padding:1rem;width:80%}.command-builder-title{color:var(--text-colour);font-size:2rem;margin-bottom:1rem;text-align:left;width:80%}.form-group{margin-bottom:1rem;width:90%}.form-group label{color:var(--text-colour);font-weight:700;margin-bottom:.5rem}.form-group input[type=text],.form-group select{border:1px solid #ccc;border-radius:4px;padding:.5rem;width:100%}.form-options{margin-bottom:1rem;width:90%}.checkbox-label{align-items:center;display:inline-flex;font-size:14px;font-weight:400;gap:.5rem;margin-bottom:.5rem}.command-output{border:1px solid #ccc;border-radius:4px;font-family:monospace;padding:.5rem;width:100%}.copy-button{background:var(--main-colour);border:2px solid var(--tertiary-colour);border-radius:5px;color:var(--text-colour);margin-right:20px;outline:none;padding:7.5px 10px;width:50%}.copy-button:hover{background:var(--tertiary-colour);color:#000}input[type=checkbox]{accent-color:var(--tertiary-colour);cursor:pointer;height:16px;margin-right:.5rem;width:16px}.certifications,.cve-page,.workshops{flex-direction:column;min-height:100vh}
/*# sourceMappingURL=main.3c664da6.css.map*/