:root{--font-primary:"Google Sans",sans-serif;--font-secondary:"Libre Caslon Text",serif;--bg-primary:#fff;--bg-secondary:#f5f8fc;--bg-tertiary:#e6edf7;--bg-blur:#ffffffa6;--colour-primary-inverse:#fff;--text-primary:#0f172a;--text-secondary:#334155;--text-muted:#64748b;--text-primary-inverse:#fff;--colour-accent-primary:#1e3a8a;--colour-accent-secondary:#2563eb;--colour-accent-tertiary:#60a5fa;--colour-accent-quaternary:#93c5fd;--colour-border:#d1d9e6;--shadow-primary:15,23,42;--gradient-accent:linear-gradient(135deg,var(--colour-accent-primary),var(--colour-accent-secondary));--gradient-soft:linear-gradient(135deg,var(--colour-accent-tertiary),var(--colour-accent-quaternary))}.theme-dark{--bg-primary:#0b1120;--bg-secondary:#111827;--bg-tertiary:#1e293b;--bg-blur:#0b1120a6;--colour-primary-inverse:#0b1120;--text-primary:#f1f5f9;--text-secondary:#cbd5e1;--text-muted:#94a3b8;--text-primary-inverse:#0f172a;--colour-accent-primary:#3b82f6;--colour-accent-secondary:#60a5fa;--colour-accent-tertiary:#93c5fd;--colour-accent-quaternary:#bae6fd;--colour-border:#1e293b;--shadow-primary:5,10,25;--gradient-accent:linear-gradient(135deg,var(--colour-accent-primary),var(--colour-accent-secondary));--gradient-soft:linear-gradient(135deg,var(--colour-accent-tertiary),var(--colour-accent-quaternary))}body{background-color:#fff;background-color:var(--bg-primary);color:var(--text-primary);font-family:Google Sans,sans-serif;font-family:var(--font-primary);margin:0;padding:0;font-size:1rem}@media (max-width:1023.98px){body{font-size:1rem}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1140px}}a{color:var(--colour-accent-primary);font-weight:500;text-decoration:none}b,strong{font-weight:600}hr{margin:3rem 0}blockquote{background-color:#f5f8fc;background-color:var(--bg-secondary);color:var(--text-secondary);border-left:4px solid #1e3a8a;border-left:4px solid var(--colour-accent-primary);margin:2rem 0;padding:1rem 2rem}blockquote p,blockquote p b{margin:0;font-size:1.2rem;font-weight:500!important}@media (max-width:1023.98px){blockquote p{font-size:1.2rem}}.bg-secondary{background-color:#f5f8fc!important;background-color:var(--bg-secondary)!important}.bg-secondary blockquote{background-color:#fff;background-color:var(--bg-primary)}.bg-tertiary{background-color:#e6edf7!important;background-color:var(--bg-tertiary)!important}.navbar-brand,.navbar-brand:focus,.navbar-brand:hover{font-family:Libre Caslon Text,serif;font-size:1.5rem;font-family:var(--font-secondary);color:var(--text-primary)!important}@media (max-width:1023.98px){.navbar-brand{font-size:1.2rem}}.theme-toggle{color:var(--text-primary)}.navbar-blur,.navbar-light{background:#ffffffa6;background:var(--bg-blur);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid #d1d9e6;border-bottom:1px solid var(--colour-border);z-index:99}.nav-link,.nav-link:hover{padding:5px 20px;font-weight:400;display:block;color:var(--text-primary)!important}.nav-link.active,.nav-link[aria-current=page]{font-weight:600!important}.navbar-toggler{padding:0;color:var(--text-primary)!important}.navbar-toggler:focus{box-shadow:none!important;border:none!important;outline:none!important}.hero-status{border-radius:5px;margin-bottom:1rem;font-size:.875rem;font-weight:600;display:inline-block}.status-dot{vertical-align:1px;background-color:#22c55e;border-radius:50%;width:8px;height:8px;margin-right:8px;animation:1.5s ease-in-out infinite status-blink;display:inline-block;box-shadow:0 0 6px #22c55ecc}@keyframes status-blink{0%,to{opacity:1}50%{opacity:.25}}@media (prefers-reduced-motion:reduce){.status-dot{animation:none}}.hero{padding:170px 0 80px}.hero-title{margin-bottom:24px;font-size:3rem}.hero-text{width:75%;font-size:1.2rem}.hero-buttons{display:flex}.hero-text a:last-of-type{margin-left:1rem}.highlight{background-color:#93c5fd;background-color:var(--colour-accent-quaternary);color:var(--colour-primary-inverse);border-radius:10px;padding:4px 8px}.hero-image{-o-object-fit:cover;object-fit:cover;-o-object-position:center;object-position:center;border-radius:50%;width:100%;transition:transform .3s}.divider{background-color:#d1d9e6;background-color:var(--colour-border);width:100%;height:1px;margin-top:80px}.btn{border-radius:10px;padding:12px 24px;font-weight:500}.btn:hover{transition:transform .2s;transform:translateY(-2px)}.btn-primary{color:var(--colour-primary-inverse)}.btn-primary,.btn-primary:focus,.btn-primary:hover{background-color:#1e3a8a;background-color:var(--colour-accent-primary);border-color:#1e3a8a;border-color:var(--colour-accent-primary)}.btn-primary:focus,.btn-primary:hover{box-shadow:0 0 12px #fff6;color:var(--colour-primary-inverse)!important}.btn-outline-secondary,.btn-outline-secondary:focus,.btn-outline-secondary:hover{background-color:#e6edf7;background-color:var(--bg-tertiary);border-color:#e6edf7;border-color:var(--bg-tertiary);color:var(--text-primary)}.btn-rounded,.btn-rounded:focus,.btn-rounded:hover{color:var(--colour-primary-inverse);border-radius:30px;transform:none}.bootstrap-icon{color:inherit;vertical-align:-5px;justify-content:center;align-items:center;width:35px;height:20px;display:inline-flex}.hero-avatar-container{justify-content:center;width:100%;display:flex}.hero-avatar{width:100%;max-width:300px;position:relative}.hero-avatar .hero-image{aspect-ratio:1;display:block}.hero-avatar-badge{pointer-events:none;width:100%;height:100%;position:absolute;top:0;bottom:0;left:0;right:0}@media (max-width:1023.98px){.hero{padding:120px 0 30px}.hero-title{font-size:2rem}.hero-text{width:100%;font-size:1rem}.hero-text a:last-of-type{margin-left:0}.hero-buttons{flex-direction:column}.hero-buttons button{margin-bottom:10px}.hero-avatar-container{display:none}.divider{margin-top:30px}}#my-work{scroll-margin-top:120px}.content-section{padding:80px 0}.experience-highlights{padding:0 0 80px}.experience-eyebrow{letter-spacing:.12em;text-transform:uppercase;color:var(--text-secondary);margin-bottom:24px;font-family:inherit;font-weight:600;font-size:.8rem!important}.experience-grid{grid-gap:16px;grid-template-columns:repeat(4,1fr);gap:16px;margin:0;display:grid}.experience-item{background-color:#f5f8fc;background-color:var(--bg-secondary);border:1px solid #d1d9e6;border:1px solid var(--colour-border);border-radius:10px;padding:24px 20px}.experience-icon{background-color:#e6edf7;background-color:var(--bg-tertiary);border-radius:10px;justify-content:center;align-items:center;width:40px;height:40px;margin-bottom:16px;display:inline-flex}.experience-icon,.experience-value{color:var(--colour-accent-primary)}.experience-value{margin-bottom:6px;font-size:1.5rem;font-weight:600;line-height:1.2}.experience-label{color:var(--text-secondary);margin:0;font-size:.95rem}@media (max-width:1023.98px){.experience-highlights{padding-bottom:40px}.experience-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width:575.98px){.experience-grid{grid-template-columns:1fr}}.project-filters{border-bottom:1px solid #d1d9e6;border-bottom:1px solid var(--colour-border);gap:28px;margin-bottom:32px}.project-tab{color:var(--text-secondary);background:0 0;border:0;border-bottom:2px solid #0000;align-items:center;gap:8px;margin-bottom:-1px;padding:12px 2px;font-weight:500;transition:color .2s,border-color .2s;display:inline-flex}.project-tab:hover{color:var(--text-primary)}.project-tab:focus-visible{outline:2px solid #1e3a8a;outline:2px solid var(--colour-accent-primary);outline-offset:2px;border-radius:4px}.project-tab.active{color:var(--colour-accent-primary);border-bottom-color:#1e3a8a;border-bottom-color:var(--colour-accent-primary);font-weight:600}.project-meta{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:12px;display:flex}.wip-badge{letter-spacing:.06em;text-transform:uppercase;color:var(--text-primary);background-color:#f59e0b33;border:1px solid #f59e0b99;border-radius:999px;padding:2px 10px;font-size:.7rem;font-weight:600;display:inline-block}.project-year{letter-spacing:.12em;color:var(--text-secondary);font-size:.8rem;font-weight:600;display:block}.project-item{background-color:#f5f8fc;background-color:var(--bg-secondary);box-shadow:0 4px 12px #0f172a1a;box-shadow:0 4px 12px rgba(var(--shadow-primary),.1);border-radius:10px;overflow:hidden}.case-grid{grid-gap:32px;grid-template-columns:repeat(2,minmax(0,1fr));gap:32px;display:grid}.case-card{background-color:#f5f8fc;background-color:var(--bg-secondary);height:100%;box-shadow:0 4px 12px #0f172a1a;box-shadow:0 4px 12px rgba(var(--shadow-primary),.1);color:var(--text-primary);border-radius:10px;flex-direction:column;text-decoration:none;transition:transform .25s,box-shadow .25s;display:flex;overflow:hidden}.case-card:hover{color:var(--text-primary);box-shadow:0 10px 24px #0f172a2e;box-shadow:0 10px 24px rgba(var(--shadow-primary),.18);text-decoration:none;transform:translateY(-4px)}.case-card:focus-visible{color:var(--text-primary);box-shadow:0 10px 24px #0f172a2e;box-shadow:0 10px 24px rgba(var(--shadow-primary),.18);text-decoration:none;transform:translateY(-4px)}.case-card-disabled,.case-card-disabled:hover{cursor:not-allowed;opacity:.55;filter:grayscale();box-shadow:0 4px 12px #0f172a1a;box-shadow:0 4px 12px rgba(var(--shadow-primary),.1);transform:none}.coming-soon-badge{background-color:#80808040;border-color:#80808099}.case-card:focus-visible{outline:2px solid #1e3a8a;outline:2px solid var(--colour-accent-primary);outline-offset:3px}.case-card-media{aspect-ratio:16/9;background-color:#e6edf7;background-color:var(--bg-tertiary);justify-content:center;align-items:center;display:flex;overflow:hidden}.case-card-media img{-o-object-fit:cover;object-fit:cover;-o-object-position:top center;object-position:top center;width:100%;height:100%;transition:transform .4s}.case-card:hover .case-card-media img{transform:scale(1.03)}.case-card-body{flex-direction:column;flex:1;padding:24px;font-weight:400;display:flex}.case-card-body h3{font-size:1.5rem}.case-card-body .categories{flex-wrap:wrap;margin-top:auto;padding-top:16px}.case-card-body .categories li{padding:8px 16px;font-size:.875rem}@media (max-width:767.98px){.case-grid{grid-template-columns:1fr;gap:24px}.case-card-body{padding:20px}.case-card-body h3{font-size:1.2rem}.case-card-body .categories{flex-direction:row;align-items:stretch}}.project-item-info{padding:20px 40px}.project-item-info h3{font-size:1.5rem}.project-item-info h3 a,.project-item-info h3 a:focus,.project-item-info h3 a:hover{color:var(--text-primary);text-decoration:none}.project-item-img a{width:350px;height:350px;display:block}.project-item-img img{-o-object-fit:cover;object-fit:cover;-o-object-position:center;object-position:center;width:100%;height:100%}.categories{gap:12px;margin:16px 0 0;padding:0;list-style:none;display:flex}.categories li{background-color:#e6edf7;background-color:var(--bg-tertiary);border-radius:30px;padding:12px 24px;font-weight:500}@media (max-width:1023.98px){.content-section{padding:30px 0}.content-section h2{font-size:2rem!important}.project-filters{gap:20px;overflow-x:auto}.project-tab{white-space:nowrap}.project-item{background-color:#fff;background-color:var(--bg-primary);display:block!important}.project-item-img a{width:100%;height:200px}.project-item-info{padding:30px 20px}.project-item-info h3{font-size:1.2rem}.categories{flex-direction:column;align-items:flex-start}}.scroll-progress{z-index:1050;transform-origin:0;height:4px;transition:opacity .4s,background .3s;position:fixed;top:0;left:0;right:0;background:#2563eb!important;background:var(--colour-accent-secondary)!important}.loading{font-size:1.2rem;font-weight:500}.project-title{margin-bottom:24px;font-size:2.5rem}.project-section{padding:80px 0;scroll-margin-top:160px}.project-section-small{padding:60px 0;scroll-margin-top:160px}.project-section:last-of-type{padding-bottom:80px}.content-section h2,.project-section h2{margin-bottom:24px;font-size:2rem;font-weight:500!important}.project-section h3{color:var(--colour-accent-primary);font-size:1.5rem}.project-section h3,.project-section h4{margin-top:40px;font-weight:500!important}.project-header{border-bottom:1px solid #d1d9e6;border-bottom:1px solid var(--colour-border);padding:180px 0 80px}.project-subtitle{color:var(--text-secondary);margin-top:8px;margin-bottom:30px;font-size:1.2rem}.project-nav{background-color:#ffffffa6;background-color:var(--bg-blur);top:79px;top:var(--header-height,79px);z-index:40;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid #d1d9e6;border-bottom:1px solid var(--colour-border);display:flex;position:-webkit-sticky;position:sticky}.back-link{color:var(--colour-accent-primary);font-weight:600;text-decoration:none;display:inline-block}.project-nav ul{margin:0;padding:0;list-style:none;display:flex}.project-nav-link,.project-nav-link:focus,.project-nav-link:hover{color:var(--text-primary);height:100%;padding:20px;font-weight:400;display:flex}.is-current .project-nav-link{border-bottom:4px solid #1e3a8a;border-bottom:4px solid var(--colour-accent-primary);padding-bottom:4px;font-weight:500}.disclaimer{color:var(--text-muted);font-style:italic}.project-overview{flex-wrap:nowrap;justify-content:space-between;display:flex}.project-overview-card{background-color:#f5f8fc;background-color:var(--bg-secondary);box-shadow:0 4px 12px #0f172a1a;box-shadow:0 4px 12px rgba(var(--shadow-primary),.1);border-radius:10px;flex-basis:32%;padding:20px}.project-overview-card h2{border-bottom:2px solid #d1d9e6;border-bottom:2px solid var(--colour-border);margin-bottom:12px;padding-bottom:12px;font-size:1.1rem;font-weight:600}.project-overview-card ul{margin-bottom:0;padding-left:0;list-style:none}figure{text-align:center;margin:2rem 0}figcaption{color:var(--text-secondary);padding:10px 0;font-size:1rem;font-weight:500;display:block}[data-rmiz-modal-content] button{display:flex}.image-grid{grid-gap:20px;grid-template-columns:repeat(2,1fr);gap:20px;margin:2rem 0;display:grid}@media (max-width:1023.98px){.image-grid{grid-template-columns:repeat(1,1fr)}}.gallery-img{border:1px solid #d1d9e6;border:1px solid var(--colour-border);width:100%}.table-container{margin:2rem 0;overflow-x:auto}.case-study-table{border-collapse:collapse;border:1px solid #d1d9e6;border:1px solid var(--colour-border);border-radius:8px;width:100%;font-size:1rem}.case-study-table td,.case-study-table th{background-color:#fff;background-color:var(--bg-primary);border:1px solid #d1d9e6;border:1px solid var(--colour-border);vertical-align:top;padding:12px 16px}.case-study-table th{background:#e6edf7;background:var(--bg-tertiary);color:var(--text-primary);font-weight:600}.case-study-table tr:nth-child(2n) td{background:#f5f8fc;background:var(--bg-secondary)}.case-study-table tr td p,.case-study-table tr th p{margin-bottom:0}@media (max-width:1023.98px){.project-header{padding:120px 0 30px}.project-title{font-size:2rem}.project-subtitle{margin-bottom:10px;font-size:1rem}.disclaimer{font-size:.8rem}.project-nav{display:none}.project-section-small{padding:30px 0}.project-overview{flex-direction:column;gap:10px}.project-overview-card{flex-basis:100%}.project-section{padding:60px 0}.project-section h2{margin-bottom:1rem;font-size:2rem}.project-section h3{margin-top:10px}}.skills-container{grid-template-columns:repeat(3,1fr);gap:30px 20px}.skill-list ul{flex-wrap:wrap;gap:16px;margin:0;padding:0;list-style:none;display:flex}.skill-list ul li{border-bottom:1px solid #d1d9e6;border-bottom:1px solid var(--colour-border);line-height:1.6;display:flex}.skill-chip{background-color:#f5f8fc;background-color:var(--bg-secondary);border-radius:30px;flex-wrap:wrap;padding:10px 20px;font-weight:500}.tool-list ul{flex-wrap:wrap;justify-content:space-between;gap:24px;margin:0;padding:0;font-size:1rem;list-style:none;display:flex}.tool-list ul li{border:1px solid #d1d9e6;border:1px solid var(--colour-border);border-radius:10px;flex:calc(33.333% - 24px);align-items:center;padding:20px;display:flex}.theme-dark .tool-list ul li{background-color:#f5f8fc;background-color:var(--bg-secondary)}.tool-list ul li h4{margin-bottom:3px;font-size:1rem}.tool-icon{justify-content:center;align-items:center;width:60px;height:60px;margin-right:20px;display:flex}.tool-icon img{max-width:100%;height:60px}.timeline-container{position:relative;overflow:hidden}.timeline-divider{background-color:#e6edf7;background-color:var(--bg-tertiary);width:2px;height:100%;margin:auto;display:block;position:absolute;left:0;right:0}.timeline-row{justify-content:space-between;align-items:center;width:100%;display:flex}.timeline-item{background-color:#fff;background-color:var(--bg-primary);box-shadow:0 4px 12px #0f172a1a;box-shadow:0 4px 12px rgba(var(--shadow-primary),.1);border-left:4px solid #1e3a8a;border-left:4px solid var(--colour-accent-primary);border-radius:10px;width:41.6667%;padding:20px}.timeline-item h3,.timeline-item p,.timeline-item time{font-size:1rem}.timeline-icon{background-color:#1e3a8a;background-color:var(--colour-accent-primary);z-index:20;border-radius:50%;justify-content:center;align-items:center;width:32px;height:32px;display:flex}.w-5\/12{width:41.6667%}.learning-cards{text-align:left;flex-wrap:wrap;justify-content:space-between;display:flex}.learning-cards>*{-moz-column-break-inside:avoid;break-inside:avoid;page-break-inside:avoid;flex-basis:48.99%;margin-bottom:24px;display:flex}.learning-card{border:1px solid #d1d9e6;border:1px solid var(--colour-border);border-radius:10px;flex-grow:1;flex-basis:100%;margin-bottom:0;padding:20px;font-size:1rem;display:flex}.learning-cards>:has(.in-progress-spinner){opacity:.5!important}.learning-card-img{width:60px;height:60px;margin-right:20px}.learning-card-img img{max-width:60px;height:60px}.theme-dark img.inverted{filter:invert()}.learning-card-text h3{margin-bottom:3px;font-size:1rem}.learning-card-text .bootstrap-icon{vertical-align:baseline;vertical-align:initial;width:auto;height:auto}.in-progress-spinner{color:var(--colour-accent-primary);width:1rem;height:1rem;border-width:.15em}.card-date{color:var(--text-muted);margin-bottom:5px;font-size:1rem;font-weight:500;display:block}@media (max-width:1023.98px){.skills-container{grid-template-columns:repeat(1,1fr)}.skill-list ul{gap:10px}.tool-list ul{-moz-column-count:1;column-count:1}.tool-list ul li{margin-bottom:12px}.timeline-row,.timeline-row.flex-row-reverse{margin-bottom:12px;flex-direction:column!important}.timeline-divider,.timeline-icon{display:none}.timeline-item{width:100%}.learning-card{margin-bottom:12px}}footer{background-color:#f5f8fc;background-color:var(--bg-secondary);border-top:1px solid #d1d9e6;border-top:1px solid var(--colour-border);z-index:10;padding:20px 0;font-size:.875rem}footer p{margin:0}.footer-link-button{font:inherit;color:var(--colour-accent-primary);cursor:pointer;background:0 0;border:0;padding:0;font-weight:500}.footer-link-button:hover{color:var(--colour-accent-secondary)}.footer-link-button:focus-visible{outline:2px solid #1e3a8a;outline:2px solid var(--colour-accent-primary);outline-offset:2px;border-radius:2px}.about-modal-backdrop{-webkit-backdrop-filter:blur(8px)}.about-modal{background-color:#fff;background-color:var(--bg-primary);color:var(--text-primary);border:1px solid #d1d9e6;border:1px solid var(--colour-border);border-radius:14px}.about-modal .modal-header{border-bottom:1px solid #d1d9e6;border-bottom:1px solid var(--colour-border);padding:14px 20px}.about-modal .modal-title{margin:0;font-size:1.15rem}.about-modal .modal-body{padding:16px 20px 20px}.about-modal-close{color:var(--text-secondary);cursor:pointer;background:0 0;border:0;border-radius:6px;padding:4px;display:inline-flex}.about-modal-close:hover{color:var(--text-primary);background-color:#e6edf7;background-color:var(--bg-tertiary)}.about-modal-intro{color:var(--text-secondary);margin-bottom:12px;font-size:.9rem}.about-stack{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.about-stack li{background-color:#f5f8fc;background-color:var(--bg-secondary);border:1px solid #d1d9e6;border:1px solid var(--colour-border);border-radius:10px;align-items:center;gap:14px;padding:10px 14px;display:flex}.about-stack-logo{background-color:#fff;background-color:var(--bg-primary);color:var(--colour-accent-primary);width:36px;height:36px;border-radius:8px;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}.about-stack-text{flex-direction:column;line-height:1.3;display:flex}.about-stack-name{font-size:.95rem;font-weight:600}.about-stack-description{color:var(--text-secondary);font-size:.825rem}.social-icons{justify-content:flex-end;gap:20px;margin:0;padding:0;list-style:none;display:flex}.social-icons li a{color:var(--colour-accent-primary);transition:color .3s;display:inline-block}.social-icons li a:hover{color:var(--colour-accent-secondary)}.back-to-top{z-index:999;background:#1e3a8a;background:var(--colour-accent-primary);color:var(--colour-primary-inverse);width:48px;height:48px;cursor:pointer;border:none;border-radius:50%;justify-content:center;align-items:center;transition:all .3s;display:flex;position:fixed;bottom:2rem;right:2rem;box-shadow:0 4px 12px #00000026}.back-to-top:hover{transform:translateY(-3px);box-shadow:0 6px 18px #00000040}.theme-dark .back-to-top{background:#1e3a8a;background:var(--colour-accent-primary);color:var(--bg-primary)}@media (max-width:1023.98px){.back-to-top{bottom:1rem;right:1rem}footer{text-align:center}.social-icons{justify-content:center;margin-top:2rem}}#cc-main{--cc-font-family:var(--font-primary);--cc-modal-border-radius:.5rem;--cc-btn-border-radius:.4rem;--cc-modal-transition-duration:.25s;--cc-modal-margin:1rem;--cc-z-index:2147480000}
