@import url(https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap);:root{--background-color:#121212;--text-color:#eaeaea;--primary-color:#bb86fc;--secondary-color:#03dac6;--surface-color:#1e1e1e;--border-color:#2c2c2c;--radius-lg:22px;--radius-md:14px;--radius-sm:8px;--shadow-lg:0 8px 32px 0 #00000040;--shadow-md:0 4px 16px 0 #0000002e;--shadow-sm:0 1.5px 6px 0 #00000021;--spacing-section:3.5rem;--spacing-card:2.2rem;--font-family-ios:-apple-system,BlinkMacSystemFont,"San Francisco","Poppins","Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;--transition-main:0.18s cubic-bezier(.4,0,.2,1)}*{box-sizing:border-box;margin:0;padding:0}html{font-size:17px;scroll-behavior:smooth}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:linear-gradient(120deg,#222222fa 60%,#222222d9),url(https://www.transparenttextures.com/patterns/diamond-upholstery.png);background-color:#121212;background-color:var(--background-color);color:#eaeaea;color:var(--text-color);line-height:1.7;margin:0;min-height:100vh}body,h1,h2,h3,h4,h5,h6{font-family:-apple-system,BlinkMacSystemFont,San Francisco,Poppins,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-family:var(--font-family-ios)}h1,h2,h3,h4,h5,h6{font-weight:700;letter-spacing:-.01em;margin-bottom:1.5rem;margin-top:0}h1{font-size:2.6rem;margin-bottom:2.2rem}h2{font-size:2.1rem;margin-bottom:2rem}h3{font-size:1.4rem;margin-bottom:1.2rem}ol,p,ul{font-size:1.05rem;font-weight:400;margin-bottom:1.3rem}section{margin-bottom:3.5rem;margin-bottom:var(--spacing-section)}#root,body,html{height:100%}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.contact-button,.domain-switcher button,.experience-segmented-tabs button,.experience-tabs button,.project-card,.project-extra-btn,.sidebar-links a,a,button{transition:background .18s cubic-bezier(.4,0,.2,1),color .18s cubic-bezier(.4,0,.2,1),box-shadow .18s cubic-bezier(.4,0,.2,1),border .18s cubic-bezier(.4,0,.2,1),transform .18s cubic-bezier(.4,0,.2,1),opacity .18s cubic-bezier(.4,0,.2,1);transition:background var(--transition-main),color var(--transition-main),box-shadow var(--transition-main),border var(--transition-main),transform var(--transition-main),opacity var(--transition-main)}.ios-fade-in{animation:iosFadeIn .5s forwards;opacity:0;transform:scale(.98)}@keyframes iosFadeIn{to{opacity:1;transform:scale(1)}}.domain-switcher{align-items:center;background-color:var(--surface-color);border-radius:18px;box-shadow:var(--shadow-sm);display:flex;gap:.25rem;min-height:36px;padding:2px 4px}.domain-switcher button{align-items:center;background-color:initial;border:none;border-radius:16px;box-shadow:none;color:var(--text-color);cursor:pointer;display:flex;font-size:.98rem;font-weight:500;min-height:28px;padding:7px 16px;transition:background-color .18s,color .18s,box-shadow .18s,transform .18s}.domain-switcher button:focus,.domain-switcher button:hover{background-color:#bb86fc1a;box-shadow:var(--shadow-sm);color:var(--primary-color);transform:scale(1.04)}.domain-switcher button.active{background-color:var(--primary-color);box-shadow:var(--shadow-md);color:var(--background-color)}.navbar{backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);background:#222222b8;border-bottom:none;border-radius:18px;box-shadow:var(--shadow-md);left:0;margin:2rem auto;min-height:48px;padding:.3rem 2.5rem;position:fixed;right:0;top:0;transition:top .3s,box-shadow .3s;width:-webkit-fit-content;width:fit-content;z-index:1000}.navbar-center{align-items:center;display:flex;gap:1.2rem}.nav-logo{color:var(--text-color);font-size:1.5rem;font-weight:600;margin-right:1.2rem;text-decoration:none}.domain-switcher,.nav-links{align-items:center;display:flex;min-height:36px}.DomainSwitcher,.domain-switcher{margin-left:0}.navbar{align-items:center;display:flex;gap:1.2rem;justify-content:flex-start}.DomainSwitcher+.nav-links{margin-left:auto}.nav-links{background:#2222222e;border-radius:18px;box-shadow:var(--shadow-sm);gap:.25rem;list-style:none;margin:0;min-height:36px;padding:2px 4px}.nav-links,.nav-links a,.nav-links li{align-items:center;display:flex}.nav-links a{border-radius:999px;box-shadow:none;color:var(--text-color);font-size:.98rem;font-weight:500;min-height:28px;padding:7px 16px;text-decoration:none;transition:background .18s,color .18s,box-shadow .18s,transform .18s}.nav-links a.active{background:var(--primary-color);border-radius:999px;box-shadow:var(--shadow-md);color:var(--background-color)}.nav-links a:hover{background:#bb86fc1a;box-shadow:var(--shadow-sm);color:var(--primary-color);transform:scale(1.04)}.hamburger{align-items:center;background:#2222222e;border:none;border-radius:50%;box-shadow:var(--shadow-md);cursor:pointer;display:none;flex-direction:column;height:44px;justify-content:center;transition:background .2s;width:44px;z-index:1100}.hamburger:active,.hamburger:focus{background:#bb86fc1f}.bar{background:var(--text-color);border-radius:2px;box-shadow:0 1px 4px #0000001a;height:4px;margin:5px 0;transition:.3s;width:28px}.bar.open:first-child{transform:translateY(7px) rotate(45deg)}.bar.open:nth-child(2){opacity:0}.bar.open:nth-child(3){transform:translateY(-7px) rotate(-45deg)}@media (max-width:900px){.nav-links{align-items:flex-start;background:#121212fa;border-radius:18px 0 0 18px;box-shadow:-2px 0 16px #0000002e;display:flex;flex-direction:column;gap:.5rem;height:auto;max-width:320px;padding:2.5rem 2rem;position:fixed;right:0;top:64px;transform:translateX(100%);transition:transform .3s ease;width:70vw;z-index:1050}.nav-links.open{transform:translateX(0)}.nav-links li{width:100%}.nav-links a{border-radius:16px;display:block;font-size:1.1rem;margin-bottom:.2rem;padding:.9rem 1.2rem;width:100%}.hamburger{display:flex}.nav-links{display:none}.nav-links.open{display:flex}.nav-links{display:none}.nav-links.open{display:flex}}.segmented-navbar{align-items:center;background:#2222222e;border-radius:18px;box-shadow:var(--shadow-sm);display:flex;gap:.25rem;min-height:36px;padding:2px 4px}.segmented-navbar a,.segmented-navbar button{align-items:center;background:none;border:none;border-radius:16px;box-shadow:none;color:var(--text-color);cursor:pointer;display:flex;font-size:.98rem;font-weight:500;min-height:28px;padding:7px 16px;text-decoration:none;transition:background .18s,color .18s,box-shadow .18s,transform .18s}.segmented-navbar a.active,.segmented-navbar button.active{background:var(--primary-color);box-shadow:var(--shadow-md);color:var(--background-color)}.segmented-navbar a:hover,.segmented-navbar button:hover{background:#bb86fc1a;box-shadow:var(--shadow-sm);color:var(--primary-color);transform:scale(1.04)}.segmented-divider{align-self:center;background:#bb86fc21;border-radius:2px;height:24px;margin:0 .3rem;width:1.5px}.sidebar{backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);background:#222222ad;border-radius:var(--radius-lg);bottom:0;box-shadow:var(--shadow-lg);color:var(--text-color);left:32px;padding:1.2rem 0;position:fixed;right:auto;width:80px;z-index:10}.sidebar,.sidebar-links{align-items:center;display:flex;flex-direction:column}.sidebar-links{gap:1.2rem;list-style:none;margin:0;padding:0}.sidebar-links:after{background-color:var(--text-color);border-radius:2px;content:"";display:block;height:70px;margin:0 auto;opacity:.12;width:2px}.sidebar-links a{align-items:center;background:#2222222e;border-radius:50%;box-shadow:var(--shadow-sm);color:inherit;display:flex;justify-content:center;padding:.7rem;transition:all .2s}.sidebar-links a:focus,.sidebar-links a:hover{background:#bb86fc21;color:var(--primary-color);transform:translateY(-3px) scale(1.08)}.sidebar-links a svg{height:24px;width:24px}@media (max-width:768px){.sidebar{display:none}}.hero{align-items:flex-start;display:flex;flex-direction:column;justify-content:center;min-height:100vh;padding:0 10%}.hero h1{font-size:5rem;font-weight:700;margin-bottom:1rem}.hero h1,.hero p{color:var(--text-color)}.hero p{font-size:1.5rem;margin-bottom:2rem}.cta-button{background-color:initial;border:1px solid var(--primary-color);border-radius:4px;color:var(--primary-color);font-weight:600;padding:1rem 2rem;text-decoration:none;transition:all .3s ease}.cta-button:hover{background-color:var(--primary-color);color:var(--background-color)}#about h2{font-size:2.5rem;font-weight:600;margin-bottom:3rem;padding-bottom:10px;position:relative;text-align:center}#about h2:after{background-color:var(--primary-color);bottom:0;content:"";height:3px;left:50%;position:absolute;transform:translateX(-50%);width:60px}.about-content{grid-gap:3rem;align-items:center;display:grid;gap:3rem;grid-template-columns:2fr 1fr}.about-text p{line-height:1.8;margin-bottom:1rem}.about-image{border-radius:8px;box-shadow:0 10px 30px -15px #000000b3;overflow:hidden;position:relative}.about-image img{border-radius:8px;display:block;filter:grayscale(100%);transition:filter .5s ease;width:100%}.about-image:hover img{filter:grayscale(0)}.resume-download-btn{background:#0000;border:2px solid var(--primary-color);border-radius:6px;box-shadow:0 2px 12px -4px #bb86fc14;color:var(--primary-color);cursor:pointer;display:inline-block;font-size:1.1rem;font-weight:600;margin-top:1.5rem;padding:.9rem 2.2rem;text-decoration:none;transition:background .3s,color .3s,border .3s,box-shadow .3s}.resume-download-btn:focus,.resume-download-btn:hover{background:var(--primary-color);border-color:var(--primary-color);box-shadow:0 4px 24px -6px #bb86fc2e;color:var(--background-color);text-decoration:none}@media (max-width:768px){.about-content{grid-template-columns:1fr}}#skills h2{font-size:2.5rem;font-weight:600;margin-bottom:3rem;padding-bottom:10px;position:relative;text-align:center}#skills h2:after{background-color:var(--primary-color);bottom:0;content:"";height:3px;left:50%;position:absolute;transform:translateX(-50%);width:60px}.skills-container{grid-gap:2rem;display:grid;gap:2rem;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));margin:0 auto;max-width:900px;padding-bottom:2.5rem}.skill-category{background:var(--surface-color);border-radius:8px;padding:2rem}.skill-category h3{border-bottom:1px solid var(--border-color);color:var(--primary-color);font-size:1.25rem;margin-bottom:1rem;padding-bottom:.5rem}.skill-category ul{list-style:none}.skill-category ul li{margin-bottom:10px;padding-left:20px;position:relative}.skill-category ul li:before{color:var(--primary-color);content:"▹";left:0;position:absolute}#projects h2{font-size:2.5rem;font-weight:600;margin-bottom:3rem;padding-bottom:10px;position:relative;text-align:center}#projects h2:after{background-color:var(--primary-color);bottom:0;content:"";height:3px;left:50%;position:absolute;transform:translateX(-50%);width:60px}.projects-grid{grid-gap:2.2rem;display:grid;gap:2.2rem;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));padding:2.5rem 0}.project-card{background:#222222ad;border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);display:flex;flex-direction:column;margin:0 1rem;overflow:hidden;padding:var(--spacing-card);transition:transform .3s,box-shadow .3s}.project-card:hover{box-shadow:0 16px 40px -10px #bb86fc38,0 2px 12px -2px #00000021;transform:translateY(-5px) scale(1.03)}.project-image img{aspect-ratio:16/9;object-fit:cover;width:100%}.project-content{display:flex;flex-direction:column;flex-grow:1;padding:1.7rem 0 0}.project-title{color:var(--text-color);font-size:1.25rem;margin-bottom:.5rem}.project-description{flex-grow:1;font-size:.9rem;line-height:1.6;margin-bottom:1rem}.project-tech-list{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-start;list-style:none;margin-bottom:1rem;padding:0}.project-tech-list li{background:#bb86fc1a;background:var(--primary-color-translucent,#bb86fc1a);border-radius:15px;color:var(--primary-color);flex-shrink:0;font-size:.75rem;font-weight:500;padding:.25rem .75rem;white-space:nowrap}.project-links{display:flex;gap:1rem}.project-links a{color:var(--text-color);font-size:1.25rem;transition:color .3s ease}.project-links a:hover{color:var(--primary-color)}.project-extra{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1.2rem}.project-extra-btn{background:#bb86fc1a;border:none;border-radius:999px;box-shadow:var(--shadow-sm);color:var(--primary-color);cursor:pointer;font-size:1.05rem;font-weight:500;margin-bottom:.5rem;padding:.7rem 1.6rem;transition:background .18s,color .18s,box-shadow .18s,transform .18s}.project-extra-btn:focus,.project-extra-btn:hover{background:var(--primary-color);box-shadow:var(--shadow-md);color:var(--background-color);transform:translateY(-2px) scale(1.04)}.project-extra-content{animation:fadeIn .4s;background:#222222f2;border-radius:8px;box-shadow:0 2px 12px -4px #0000002e;color:var(--text-color);font-size:.98rem;line-height:1.7;margin-bottom:.7rem;margin-top:.7rem;padding:1rem 1.2rem;width:100%}.project-extra-content a{color:var(--primary-color);text-decoration:underline;word-break:break-all}.project-header-row{align-items:center;display:flex;gap:.75rem;margin-bottom:.5rem}.project-type-badge{border-radius:12px;display:inline-block;font-size:.85rem;font-weight:600;letter-spacing:.03em;margin-left:.2em;padding:.25em .9em;text-transform:uppercase}.project-type-badge.case-study{background:#03dac626;border:1px solid var(--secondary-color);color:var(--secondary-color)}.project-type-badge.teardown{background:#bb86fc26;border:1px solid var(--primary-color);color:var(--primary-color)}.project-about-content{max-width:100%;overflow-wrap:anywhere;white-space:pre-line;word-break:break-word}.project-link-text{align-items:center;background:#bb86fc21;border-radius:999px;box-shadow:var(--shadow-sm);color:var(--primary-color);display:inline-flex;font-size:1.05rem;font-weight:600;margin-left:.5rem;padding:.5rem 1.3rem;text-decoration:none;transition:background .18s,color .18s,box-shadow .18s,transform .18s}.project-link-text:hover{background:var(--primary-color);box-shadow:var(--shadow-md);color:var(--background-color);text-decoration:underline;transform:translateY(-2px) scale(1.04)}.pdf-modal-overlay{align-items:center;background:#000c;bottom:0;display:flex;justify-content:center;left:0;padding:2rem;position:fixed;right:0;top:0;z-index:1000}.pdf-modal-content{background:#fff;border-radius:8px;height:90vh;overflow:hidden;position:relative;width:90vw}.pdf-modal-close{align-items:center;background:#000000b3;border:none;border-radius:50%;color:#fff;cursor:pointer;display:flex;font-size:1.2rem;height:40px;justify-content:center;position:absolute;right:1rem;top:1rem;width:40px;z-index:1001}.pdf-modal-close:hover{background:#000000e6}#experience h2{font-size:2.5rem;font-weight:600;margin-bottom:3rem;padding-bottom:10px;position:relative;text-align:center}#experience h2:after{background-color:var(--primary-color);bottom:0;content:"";height:3px;left:50%;position:absolute;transform:translateX(-50%);width:60px}.experience-container{background:#222222ad;border-radius:var(--radius-lg);box-shadow:var(--shadow-md);display:flex;gap:2.5rem;margin-bottom:var(--spacing-section);padding:var(--spacing-card)}.experience-tabs{display:flex;flex-direction:column}.experience-tabs button{background:#0000;border:none;border-left:2px solid var(--border-color);color:var(--text-color);cursor:pointer;font-family:inherit;font-size:1rem;padding:10px 20px;text-align:left;transition:all .3s ease}.experience-tabs button:hover{background-color:var(--surface-color);color:var(--primary-color)}.experience-tabs button.active{border-left-color:var(--primary-color);color:var(--primary-color)}.experience-content{background:#222222ad;border-radius:var(--radius-lg);box-shadow:var(--shadow-md);flex-grow:1;padding:var(--spacing-card)}.experience-content h3{font-size:1.5rem;margin-bottom:.5rem}.experience-content .company{color:var(--primary-color)}.experience-content .range{color:#a0a0a0;font-size:.9rem;margin-bottom:1.5rem}.experience-content ul{list-style:none}.experience-content ul li{margin-bottom:10px;padding-left:20px;position:relative}.experience-content ul li:before{color:var(--primary-color);content:"▹";left:0;position:absolute}.experience-mobile-tabs{display:none}.exp-hamburger{align-items:center;background:var(--surface-color);border:none;border-radius:8px;color:var(--text-color);cursor:pointer;display:flex;font-size:1.1rem;margin-bottom:1rem;padding:.7rem 1.2rem;position:relative;z-index:20}.exp-hamburger .bar{background:var(--text-color);border-radius:2px;display:block;height:3px;margin:3px 0;transition:.3s;width:22px}.exp-hamburger .bar.open:first-child{transform:translateY(6px) rotate(45deg)}.exp-hamburger .bar.open:nth-child(2){opacity:0}.exp-hamburger .bar.open:nth-child(3){transform:translateY(-6px) rotate(-45deg)}.exp-mobile-dropdown{background:var(--surface-color);border-radius:8px;box-shadow:0 4px 16px #0000001f;display:flex;flex-direction:column;left:0;margin-top:.5rem;position:absolute;right:0;z-index:15}.exp-mobile-dropdown button{background:none;border:none;border-bottom:1px solid var(--border-color);color:var(--text-color);cursor:pointer;font-size:1rem;padding:1rem 1.2rem;text-align:left;transition:background .2s,color .2s}.exp-mobile-dropdown button:last-child{border-bottom:none}.exp-mobile-dropdown button.active,.exp-mobile-dropdown button:hover{background:var(--primary-color);color:var(--background-color)}.experience-segmented-tabs{background:none;border-radius:12px;display:flex;gap:.5rem;margin-bottom:1.2rem;overflow-x:auto;padding:.5rem .2rem 1.2rem}.experience-segmented-tabs button{background:#bb86fc1a;border:none;border-radius:999px;box-shadow:var(--shadow-sm);color:var(--primary-color);cursor:pointer;flex:0 0 auto;font-size:1.05rem;font-weight:500;margin:0 .2rem;padding:.7rem 1.4rem;transition:background .18s,color .18s,box-shadow .18s,transform .18s}.experience-segmented-tabs button.active{background:var(--primary-color);box-shadow:var(--shadow-md);color:var(--background-color)}.experience-segmented-tabs button:focus{outline:2px solid var(--primary-color)}.experience-segmented-tabs button:focus,.experience-segmented-tabs button:hover,.experience-tabs button:focus,.experience-tabs button:hover{background:var(--primary-color);box-shadow:var(--shadow-md);color:var(--background-color);transform:scale(1.04)}@media (max-width:768px){.experience-container{flex-direction:column}.experience-tabs{display:none}.experience-segmented-tabs{display:flex}.exp-hamburger,.exp-mobile-dropdown,.experience-mobile-tabs{display:none!important}}.contact-container{margin:0 auto;max-width:600px;padding:4rem 0;text-align:center}.contact-title{color:var(--primary-color);font-size:3rem;font-weight:700;margin-bottom:1rem}.contact-text{line-height:1.8;margin-bottom:2rem}.contact-button{background:#bb86fc1a;border:none;border-radius:999px;box-shadow:var(--shadow-sm);color:var(--primary-color);cursor:pointer;font-size:1.1rem;font-weight:600;padding:1rem 2.2rem;text-decoration:none;transition:background .18s,color .18s,box-shadow .18s,transform .18s}.contact-button:focus,.contact-button:hover{background:var(--primary-color);box-shadow:var(--shadow-md);color:var(--background-color);text-decoration:none;transform:translateY(-2px) scale(1.04)}.contact-social-mobile{display:none}@media (max-width:768px){.contact-social-mobile{display:flex;justify-content:center;margin-top:2rem}}.App{background-color:var(--background-color);display:flex;flex-direction:column;min-height:100vh}.main-content{flex-grow:1;padding:2rem 5% 2rem 150px}@media (max-width:768px){.main-content{padding:2rem 5%}}@media (max-width:900px){.main-content{padding:1.2rem .7rem}section{border-radius:var(--radius-md);min-height:0;min-height:auto;padding-left:.5rem;padding-right:.5rem;padding-top:70px}}section{border-bottom:1px solid var(--border-color);min-height:100vh;padding-top:80px}section:last-child{border-bottom:none}@keyframes fadeIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.fade-in-section{opacity:0;transform:translateY(20px);transition:opacity .6s ease-out,transform .6s ease-out}.fade-in-section.is-visible{opacity:1;transform:translateY(0)}.honours-section{background:#222222ad;border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);margin:var(--spacing-section) 0;padding:var(--spacing-card)}.honours-section h2{color:var(--primary-color);font-size:2.5rem;margin-bottom:2.5rem;padding-bottom:10px;position:relative;text-align:center}.honours-section h2:after{background-color:var(--primary-color);bottom:0;content:"";height:3px;left:50%;position:absolute;transform:translateX(-50%);width:60px}.honours-timeline-grid{grid-gap:2.5rem;display:grid;gap:2.5rem;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));margin:0 auto;max-width:1100px}.honour-timeline-card{align-items:stretch;background:#222222ad;border-radius:var(--radius-lg);box-shadow:var(--shadow-md);display:flex;min-height:220px;overflow:hidden;padding:var(--spacing-card);position:relative;transition:transform .18s,box-shadow .18s}.honour-timeline-card:hover{box-shadow:0 16px 40px -10px #bb86fc38,0 2px 12px -2px #00000021;transform:translateY(-6px) scale(1.025)}.honour-timeline-bar{background:linear-gradient(180deg,var(--primary-color),var(--secondary-color));border-radius:8px 0 0 8px;margin-right:.5rem;min-height:100%;width:8px}.honour-timeline-content{display:flex;flex:1 1;flex-direction:column;justify-content:center;padding:2rem 2rem 2rem 1.2rem}.honour-badge-row{align-items:center;display:flex;gap:1.1rem;margin-bottom:1.1rem}.honour-badge{align-items:center;background:linear-gradient(120deg,var(--primary-color),var(--secondary-color));border-radius:50%;box-shadow:0 2px 8px -2px #bb86fc2e;color:#fff;display:flex;font-size:2.2rem;height:2.7rem;justify-content:center;width:2.7rem}.honour-title{color:var(--primary-color);font-size:1.35rem;font-weight:700;letter-spacing:.01em}.honour-description{background:#bb86fc14;border-left:4px solid var(--primary-color);border-radius:0 12px 12px 0;box-shadow:0 1.5px 8px -2px #bb86fc14;color:var(--text-color);font-size:1.05rem;font-style:italic;margin:0;padding:1.1rem 1.2rem}@media (max-width:600px){.honours-timeline-grid{gap:1.5rem;grid-template-columns:1fr}.honour-timeline-content{padding:1.2rem 1rem 1.2rem .7rem}}
/*# sourceMappingURL=main.dbf670bc.css.map*/