@import url("https://fonts.googleapis.com/css2?family=Fira+Sans:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Host+Grotesk:ital,wght@0,300..800;1,300..800&family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=Playfair+Display:ital,wght@0,400..900;1,400..900&display=swap");*,:after,:before{box-sizing:border-box}html{line-height:1.5;font-family:Roboto,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif}html:focus-within{scroll-behavior:smooth}body{min-height:100vh;text-rendering:optimizeSpeed;margin:0;background-color:var(--cream-white)}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,ol,p,ul{margin:0 0 1.5rem}ol[role=list],ul[role=list]{list-style:none}a{-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto;color:var(--vibrant-purple)}a:focus-visible,a:hover{color:var(--purple-accent)}img,picture{max-width:100%;display:block}svg{fill:currentColor}svg:not(:root){overflow:hidden}button,input,select,textarea{font:inherit}@media (prefers-reduced-motion:reduce){html:focus-within{scroll-behavior:auto}*,:after,:before{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}.container{width:min(65em,100%);margin:0 auto;padding-left:1.5rem;padding-right:1.5rem}.container--text{width:min(45em,100%)}:root{--cream-white:#faf9ff;--vibrant-purple:#8b5cf6;--purple-accent:#a855f7;--light-purple:#c4b5fd;--navbar-purple:#a855f7;--forest-green:#65b741;--dark-text:#000000;--light-text:#6b7280;accent-color:var(--vibrant-purple);--vibrant-orange:#ff8c42;--orange-accent:#ff9f5a;--light-orange:#ffb84d;--dark-orange:#e07026;--heading-font:"Host Grotesk","Inter",system-ui,sans-serif}.btn{display:inline-block;padding:.55em 1.5em .5em;background-color:var(--vibrant-purple);border:.125rem solid var(--vibrant-purple);color:#fff;border-radius:.25em;text-decoration:none;cursor:pointer;font-family:inherit;font-size:inherit;transition:all .3s ease}.btn:focus-visible,.btn:hover{background-color:var(--purple-accent);border-color:var(--purple-accent);transform:translateY(-2px);box-shadow:0 4px 8px rgba(139,92,246,.3)}.btn--secondary{background-color:var(--deep-purple);border-color:var(--deep-purple);color:#fff}.btn--secondary:focus-visible,.btn--secondary:hover{background-color:var(--vibrant-purple);border-color:var(--vibrant-purple);color:#fff}.btn--large{font-size:1.15rem;padding:.75em 2em .7em}.navbar{background:linear-gradient(135deg,#5623a3,#722ed8 50%,#4c1d95);color:#fff;border-bottom:.25rem solid #8d42fd;box-shadow:0 4px 20px rgba(76,29,149,.3);position:relative;z-index:1000}.navbar .container{display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:1.5rem;padding-left:1rem;padding-right:1rem;padding-top:1.5rem;width:100%;max-width:none;margin:0}.navbar__headline{font-size:1.424rem;line-height:1.3;margin:0;flex-shrink:0}.navbar__logo{text-decoration:none;display:flex;align-items:center;gap:.75rem;color:#fff;padding:1rem 1rem 1rem 0;transition:all .3s ease;border-radius:.5rem;overflow:visible}.navbar__logo:focus,.navbar__logo:hover{color:#fff;background-color:rgba(255,255,255,.1);transform:translateY(-2px)}.navbar__icon{width:auto;filter:drop-shadow(0 4px 8px rgba(0,0,0,.3)) drop-shadow(0 2px 4px rgba(0,0,0,.2));overflow:visible}.navbar__bobble-head,.navbar__ch-logo{filter:drop-shadow(0 2px 4px rgba(0,0,0,.2))}.navbar__nav{display:flex;flex-direction:column;align-items:flex-end;justify-content:flex-end;margin-right:0}.navbar__list{padding:0;list-style:none;display:flex;gap:.5rem;margin:0}.navbar__link{display:block;text-decoration:none;color:#fff;padding:1rem 2rem;text-align:center;transition:all .3s ease;border-radius:.75rem;font-weight:500;position:relative;overflow:hidden;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1)}.navbar__link:before{content:"";position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.2),transparent);transition:left .5s}.navbar__link:hover:before{left:100%}.navbar__link:focus,.navbar__link:hover{color:#fff;background:rgba(255,255,255,.15);transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,.2);border-color:rgba(255,255,255,.3)}.navbar__social{gap:.75rem;margin-top:1rem}.navbar__social,.navbar__social-link{display:flex;justify-content:center;align-items:center}.navbar__social-link{padding:.75rem;border-radius:50%;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);transition:all .4s ease;position:relative;overflow:hidden}.navbar__social-link:before{content:"";position:absolute;top:0;left:0;right:0;bottom:0;background:radial-gradient(circle,rgba(255,248,220,.3) 0,transparent 70%);opacity:0;transition:opacity .4s ease;border-radius:50%}.navbar__social-link:hover:before{opacity:1}.navbar__social-link:hover{background:rgba(255,248,220,.15);border-color:rgba(255,248,220,.4);transform:translateY(-2px) scale(1.1);box-shadow:0 6px 20px rgba(255,248,220,.3)}.navbar__social-icon{width:24px;height:24px;transition:all .3s ease;filter:brightness(.9)}.navbar__social-link:hover .navbar__social-icon{filter:brightness(1.2) contrast(1.1);transform:scale(1.1)}.banner{background-image:url(/images/ottawa-night.JPG);background-position:center 30%;background-size:cover;background-attachment:scroll;background-repeat:no-repeat;position:relative}.banner .container{min-height:150vh;display:flex;justify-content:center;align-items:flex-end;padding-top:3rem;padding-bottom:12rem}.banner__content{width:min(36em,90%);background-color:rgba(244,242,222,.1);padding:2rem;border-radius:1rem;box-shadow:0 8px 32px rgba(0,0,0,.3);margin-bottom:1vh}.banner__title{font-size:1.756rem;line-height:1.2;color:#acb6dd;margin-bottom:1rem;font-weight:900}.banner__text{font-size:1.15rem;color:#ffffff;margin-bottom:1.5rem;line-height:1.6;font-weight:900;text-shadow:2px 2px 4px rgba(0,0,0,.8)}.card{border-radius:1rem;overflow:hidden;box-shadow:0 4px 20px rgba(139,92,246,.15);background-color:#fff;color:var(--dark-text);text-decoration:none;display:flex;flex-direction:column;transition:all .3s ease;border:2px solid transparent;cursor:default}.card:focus-visible,.card:hover{color:var(--dark-text);box-shadow:0 8px 30px rgba(139,92,246,.25);transform:translateY(-2px);border-color:var(--light-purple);filter:brightness(1.05)}.card__image{position:relative;overflow:hidden;height:250px;width:100%;display:flex;align-items:center;justify-content:center}.card__image img{display:block;max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain;transition:transform .3s ease}.card:hover .card__image img{transform:scale(1.02)}.card__content{padding:1.25rem;display:flex;flex-direction:column;flex-grow:1;justify-content:space-between;align-items:center;text-align:center}.card__title{font-size:1.75rem;color:var(--deep-purple);margin-bottom:1rem;line-height:1.3;font-weight:600}.card__text{flex-grow:1;color:var(--light-text);line-height:1.6}.footer{background:linear-gradient(135deg,#48198f,#6d28d9 50%,#431883);color:#fff;border-top:.25rem solid var(--vibrant-purple);box-shadow:0 -4px 20px rgba(76,29,149,.3)}.footer .container{padding-top:3rem;padding-bottom:3rem;display:flex;flex-direction:column;gap:2rem;width:100%;max-width:none;margin:0}.footer__left{padding-left:1rem}.footer__logo{display:flex;gap:1rem;align-items:center;color:#fff;text-decoration:none;transition:all .3s ease;padding:1rem;border-radius:.75rem;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1)}.footer__logo:focus,.footer__logo:hover{color:#fff;background:rgba(255,255,255,.1);transform:translateY(-2px);box-shadow:0 4px 12px rgba(139,92,246,.3)}.footer__ch-icon{filter:drop-shadow(0 2px 4px rgba(0,0,0,.2));flex-shrink:0}.footer__logo-text{display:flex;flex-direction:column;gap:.25rem}.footer__title{font-size:1.5rem;font-weight:700;line-height:1.2;margin:0}.footer__subtitle{font-size:.9rem;color:var(--light-purple);font-weight:400}.footer__right{display:flex;flex-direction:column;gap:1.5rem;padding-right:1rem}.footer__nav{display:flex;justify-content:flex-end}.footer__list{padding:0;margin:0;list-style:none;display:flex;flex-direction:column;gap:1rem}.footer__link{color:#fff;text-decoration:none;transition:all .3s ease;padding:.75rem 1.5rem;border-radius:.5rem;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);text-align:center;font-weight:500}.footer__link:focus,.footer__link:hover{color:#fff;background:rgba(255,255,255,.15);transform:translateY(-1px);box-shadow:0 2px 8px rgba(139,92,246,.2);border-color:rgba(255,255,255,.3)}.footer__copyright{color:var(--light-purple);font-size:.85rem;text-align:center;padding:.2rem}.footer__bottom{display:flex;flex-direction:column;align-items:flex-end;gap:.5rem}.footer__made-with{display:flex;align-items:center;gap:.5rem;font-size:1.1rem;color:var(--light-purple);opacity:.8;margin-left:auto}.footer__nextjs-logo{opacity:.7;transition:opacity .3s ease,transform .3s ease;filter:invert(1)}@media only screen and (min-width:45em){.navbar .container{flex-direction:row;justify-content:space-between;padding-top:0;padding-left:1.5rem;padding-right:1.5rem}.navbar__nav{width:auto;flex-direction:column;align-items:flex-end}.navbar__list{display:flex}.navbar__link{padding:1.5rem}.navbar__social{margin-top:.75rem;gap:1rem}.banner{background-attachment:scroll;background-size:cover;background-position:center 38%}.banner__title{font-size:2.2rem}.footer .container{flex-direction:row;justify-content:space-between;align-items:flex-start;padding-left:1.5rem;padding-right:1.5rem}.footer__left{padding-left:0}.footer__right{padding-right:0;align-items:flex-end}.footer__list{flex-direction:row;gap:.5rem}.footer__copyright{text-align:right}.card__title{font-size:1.85rem}}@media (max-width:45em){.banner .container{justify-content:center;align-items:flex-end}.banner__content{margin:0 auto 6vh}}@media (min-width:45em) and (max-width:60em){.banner .container{justify-content:center;align-items:flex-end}.banner__content{margin:0 auto 8.5vh;max-width:min(42rem,90%)}}@media (min-width:60em){.banner .container{width:100%;max-width:none;margin:0;justify-content:flex-start;align-items:flex-end;padding-left:0}.banner__content{margin:0 0 9.5vh clamp(6.5rem,6.7vw,6rem);max-width:clamp(34rem,40vw,50rem)}}.banner__title{font-size:2.2rem}.footer .container{flex-direction:row;justify-content:space-between;align-items:flex-start;padding-left:1.5rem;padding-right:1.5rem}.footer__left{padding-left:0}.footer__right{padding-right:0;align-items:flex-end}.footer__list{flex-direction:row;gap:.5rem}.footer__copyright{text-align:right}.card__title{font-size:1.85rem}.card-group{background-color:var(--cream-white);padding:6rem 0}.card-group__title{grid-column:1/-1;place-self:center;display:inline-block;margin:0 auto 2rem;font-family:var(--heading-font);font-weight:800;font-size:2.7rem;font-family:Fira Sans,sans-serif;font-weight:600;line-height:1.2;color:var(--vibrant-purple);padding-bottom:.4rem;position:relative}.card-group__title:after{content:"";position:absolute;left:50%;bottom:0;transform:translateX(-50%);width:80%;height:4px;border-radius:999px;background:var(--vibrant-purple);opacity:.85}.card-group .container{display:grid;grid-gap:2rem;gap:2rem;grid-template-columns:repeat(3,1fr)}@media only screen and (max-width:60em){.card-group .container{grid-template-columns:repeat(2,1fr);gap:1.75rem}.banner__title{font-size:2.5rem}.banner__text{font-size:1.25rem}.card__title{font-size:2rem}.card-group__title{font-size:2.4rem;font-family:Fira Sans,sans-serif;font-weight:600}}@media only screen and (max-width:45em){.card-group .container{grid-template-columns:1fr;gap:1.5rem}.card-group{padding:4rem 0}.card{max-width:400px;margin:0 auto}.card-group__title{font-size:2rem;font-family:Fira Sans,sans-serif;font-weight:600}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.banner__content,.card{animation:fadeInUp .8s ease-out}:focus-visible{outline:2px solid var(--vibrant-purple);outline-offset:2px}@keyframes bobble-head{0%,50%,to{transform:rotate(0deg);transform-origin:50% 100%}25%{transform:rotate(5deg);transform-origin:50% 100%}75%{transform:rotate(-4.5deg);transform-origin:30% 100%}}.bobble-character{overflow:visible!important}.project-card{border-radius:1rem;overflow:hidden;box-shadow:0 4px 20px rgba(139,92,246,.15);background-color:#fff;color:var(--dark-text);text-decoration:none;display:flex;flex-direction:column;transition:all .3s ease;border:2px solid transparent;cursor:pointer;width:100%;max-width:600px;margin:0 auto}.project-card:focus-visible,.project-card:hover{color:var(--dark-text);box-shadow:0 8px 30px rgba(139,92,246,.25);transform:translateY(-5px);border-color:var(--light-purple);filter:brightness(1.05)}.project-card__image{position:relative;overflow:hidden;aspect-ratio:16/9;height:250px;width:100%}.project-card__image video{display:block;width:100%;height:100%;object-fit:cover;transition:transform .3s ease}.project-card:hover .project-card__image video{transform:scale(1.03);filter:brightness(1.1)}.project-card__content{padding:2rem;display:flex;flex-direction:column;flex-grow:1;align-items:flex-start}.project-card__text{flex-grow:1;color:var(--dark-text);line-height:1.6;margin-bottom:1.5rem;font-weight:500;font-size:1rem}.about-me{background-color:var(--cream-white);padding:6rem 0;position:relative}.about-me__title{text-align:center;font-size:2.7rem;font-family:Fira Sans,sans-serif;font-weight:600;line-height:1.2;color:var(--vibrant-purple);margin-bottom:3rem;position:relative}.about-me__title:after{content:"";position:absolute;left:50%;bottom:-.5rem;transform:translateX(-50%);width:80%;height:4px;border-radius:999px;background:var(--vibrant-purple);opacity:.85}.about-me__content{display:grid;grid-template-columns:2fr 1fr;grid-gap:4rem;gap:4rem;align-items:center}.about-me__text{display:flex;flex-direction:column;gap:2.5rem}.about-me__intro h3{font-size:1.8rem;color:var(--vibrant-purple);margin-bottom:1rem;font-weight:700}.about-me__intro p{font-size:1.1rem;line-height:1.7;color:var(--dark-text);margin-bottom:1rem}.about-me__education h3{font-size:1.6rem;color:var(--vibrant-purple);margin-bottom:1.5rem;font-weight:700}.education-item{display:flex;align-items:center;gap:1rem;padding:1.5rem;background:rgba(139,92,246,.05);border-radius:1rem;border:2px solid rgba(139,92,246,.1);transition:all .3s ease;max-width:85%;text-decoration:none;color:inherit;cursor:pointer}.education-item:hover{background:rgba(139,92,246,.08);border-color:rgba(139,92,246,.2);transform:translateY(-2px);box-shadow:0 4px 15px rgba(139,92,246,.15)}.education-text h4{font-size:1.2rem;color:var(--vibrant-purple);margin:0 0 .25rem;font-weight:600}.education-text p{font-size:1rem;color:var(--dark-text);margin:0 0 .5rem;font-weight:500}.education-year{font-size:.9rem;color:black;font-weight:500}.about-me__image{display:flex;justify-content:center;align-items:center}.about-me__photo{width:250px;height:280px;border-radius:50%;object-fit:cover;border:6px solid rgb(128,128,128);box-shadow:0 8px 25px rgba(139,92,246,.3);transition:all .3s ease}@media only screen and (max-width:60em){.about-me__content{grid-template-columns:1fr;gap:3rem;text-align:center}.about-me__text{order:2}.about-me__image{order:1}.about-me__photo{width:250px;height:280px}.about-me__title{font-size:2.4rem}.education-item{margin:0 auto;max-width:90%}}@media only screen and (max-width:45em){.about-me__photo{width:250px;height:280px}.about-me__title{font-size:2rem}.about-me__intro h3{font-size:1.6rem}.education-item{margin:0 auto;max-width:90%;flex-direction:column;text-align:center;gap:1rem}}.modal{position:fixed;inset:0;z-index:2000;display:grid;place-items:center;padding:1rem;background:rgba(0,0,0,.6)}.modal__dialog{position:relative;width:min(90vw,900px);border-radius:1rem;background:#0b0b0b;color:#fff;box-shadow:0 10px 40px rgba(0,0,0,.5);overflow:hidden}.modal__body{aspect-ratio:16/9;background:#000;position:relative}.modal__video{width:100%;height:100%;object-fit:contain;display:block;position:relative;z-index:1}.modal__caption{padding:.75rem 1rem 1rem;font-weight:600}.modal__close{position:absolute;top:.5rem;right:.75rem;border:0;background:transparent;color:#fff;font-size:1.75rem;line-height:1;cursor:pointer;z-index:10}.modal__close--dark{color:#000}.contact-form{background-image:url(/images/autumn-road.JPG);background-size:cover;background-position:50%;background-attachment:scroll;background-repeat:no-repeat;min-height:100vh;display:flex;align-items:center;padding:3rem 0}.contact-form__wrap{background-color:#faf7f2;border-radius:1.5rem;box-shadow:.25rem 1rem rgba(0,0,0,.13);overflow:hidden}.contact-form__form,.contact-form__wrap{display:grid;--cols:1;grid-template-columns:repeat(var(--cols),1fr)}.contact-form__form{padding:3rem 1.5rem;grid-gap:1.5rem;gap:1.5rem}.form-unit.full{grid-column:1/-1}.navbar--orange{background:linear-gradient(135deg,#a55a1b,#ea7426 50%,#b15318);border-bottom:.25rem solid var(--dark-orange);box-shadow:0 4px 20px rgba(197,90,0,.4)}.footer--orange{background:linear-gradient(135deg,#a84d0d,#ee6910 50%,#9c4814);border-top:.25rem solid var(--dark-orange);box-shadow:0 -4px 20px rgba(160,68,0,.4)}.footer--orange .footer__copyright,.footer--orange .footer__made-with,.footer--orange .footer__subtitle{color:#ffeacc}.contact-form__image{aspect-ratio:16/9;background-color:var(--vibrant-orange);background-image:url(/images/autumn-ottawa.JPG);background-size:cover;background-position:50%;border-radius:1.5rem;box-shadow:0 .25rem 1rem rgba(0,0,0,.13)}.contact-form__title{margin-bottom:0;transform:translateY(-1rem);font-size:2.019rem;color:var(--dark-orange);line-height:1.3;font-weight:900;-webkit-text-stroke:.5px var(--dark-orange)}.contact-form input{padding:.25rem}.contact-form input,.contact-form textarea{display:block;width:100%;border:.0625rem solid #ccc;border-radius:.25rem}.contact-form textarea{padding:.5rem;font-family:inherit;resize:vertical;min-height:60px}.contact-form label{display:block;width:100%;font-size:.875rem;font-weight:900;margin-bottom:.25rem}.contact-form p{font-weight:900;line-height:1.6}.contact-form .btn{background-color:var(--dark-orange);border:.125rem solid var(--dark-orange);color:#fff}.contact-form .btn:focus-visible,.contact-form .btn:hover{background-color:var(--vibrant-orange);border-color:var(--vibrant-orange);color:#fff}@media only screen and (min-width:45em){.contact-form__wrap{--cols:3}.contact-form__form{grid-column:span 2;padding:6rem 3rem;--cols:2}.contact-form__image{aspect-ratio:auto}}@media only screen and (min-width:60em){.contact-form__wrap{--cols:2}.contact-form__form{grid-column:span 1}}.hero-graphic{width:60px;max-width:80px;height:auto;display:block;overflow:visible}#Head{animation:bobble-head 2.5s linear infinite}html{text-size-adjust:100%}body,html{max-width:100%;overflow-x:hidden}@media (max-width:45em){.navbar .container{gap:.75rem;padding-top:.5rem}.navbar__list{flex-wrap:nowrap;gap:.5rem}.navbar__link{padding:.65rem 1.1rem}.navbar__logo{padding:.25rem .5rem .25rem 0}.hero-graphic{width:46px}.banner .container{min-height:88svh;padding-bottom:3.5rem}.banner__content{width:min(30rem,92%);padding:1rem 1.25rem}.banner__title{font-size:clamp(1.2rem,4.6vw + .25rem,1.55rem)}.banner__text{font-size:clamp(.95rem,3.4vw + .1rem,1.08rem);line-height:1.5}}@supports (-webkit-touch-callout:none){.navbar__bobble-head,.navbar__ch-logo,.navbar__icon{filter:none!important}.hero-graphic{-webkit-backface-visibility:hidden;backface-visibility:hidden;transform:translateZ(0)}}.banner__content{-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);background-clip:padding-box}@media (max-width:45em){.about-me__content,.card-group .container,.footer .container{overflow-x:hidden}.footer .container{gap:1.25rem;padding-left:1rem;padding-right:1rem}.footer__logo{gap:.75rem;padding:.75rem .9rem;max-width:24rem}.footer__ch-icon{width:clamp(52px,18vw,82px)}.footer__title{font-size:clamp(1.02rem,4.8vw,1.35rem);line-height:1.15}.footer__subtitle{font-size:clamp(.82rem,3.2vw,.93rem);line-height:1.25}.footer__list{gap:.5rem}.footer__link{padding:.55rem 1rem;font-size:.96rem}.footer__copyright{font-size:.8rem}.footer__made-with{font-size:.98rem}.footer__nextjs-logo{max-width:clamp(90px,30vw,120px)}}