diff --git a/assets/css/main.css b/assets/css/main.css index a827ecd..65cf3ee 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -1,7 +1,6 @@ * :not(ol) { padding: 0; margin: 0; - -webkit-box-sizing: border-box; box-sizing: border-box; font-family: "Roboto Slab", serif; } @@ -11,19 +10,19 @@ } body { - --accent-color: #E72C37; + --accent-color: #e72c37; --light-shade: rgba(var(--text-color), 0.06); --text-color: 17, 17, 17; --text-color-light: 100, 100, 100; --foreground-color: 255, 255, 255; - --background-color: #F6f6f6; + --background-color: #f6f6f6; --error-color: red; --green: #007936; - --banner-color: #1E88E5; + --banner-color: #1e88e5; --secondary-text-color: #034baa; --font-weight-factor: 1; color: rgba(var(--text-color), 1); - height: calc(100%); + height: 100%; background: var(--background-color); } @@ -89,7 +88,8 @@ p { } img { - object-fit: cover; + -o-object-fit: cover; + object-fit: cover; } a { @@ -171,6 +171,10 @@ ol[type="1"] { display: flex; } +.flex-wrap { + flex-wrap: wrap; +} + .grid { display: grid; } @@ -335,8 +339,6 @@ ol[type="1"] { word-wrap: break-word; -ms-word-break: break-all; word-break: break-word; - -ms-hyphens: auto; - -moz-hyphens: auto; -webkit-hyphens: auto; hyphens: auto; } @@ -350,8 +352,8 @@ ol[type="1"] { } .icon { - width: 1.5rem; - height: 1.5rem; + width: 1.2rem; + height: 1.2rem; fill: rgba(var(--text-color), 0.9); } @@ -452,7 +454,7 @@ ol[type="1"] { } #elevator_popup { - position: absolute; + position: fixed; width: 100%; height: 100%; top: 0; @@ -465,6 +467,7 @@ ol[type="1"] { } .elevator__header { + position: -webkit-sticky; position: sticky; top: 0; padding: 1.2rem 1.5rem; @@ -496,6 +499,7 @@ ol[type="1"] { } .floor_list__header { + position: -webkit-sticky; position: sticky; top: 0; padding-bottom: 0.5rem; @@ -523,7 +527,9 @@ ol[type="1"] { .outlet-list__item { display: grid; - user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; width: min(50ch, 100%); counter-increment: outlet-counter; } @@ -578,46 +584,31 @@ ol[type="1"] { } #main_header { - position: relative; + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1; + background: var(--background-color); + display: flex; + align-items: center; + justify-content: space-between; padding: 1rem; - grid-template-columns: repeat(3, 1fr); } #elevator_button { justify-self: flex-start; margin-left: -1rem; } -#elevator_button .icon { - width: 1.7rem; - height: 1.7rem; + +.main-logo { + position: absolute; + left: 50%; + transform: translateX(-50%); } #main_header__logo { - height: 1.8rem; - width: 1.8rem; -} - -.theme-switcher { - position: relative; - justify-self: flex-end; - width: 1.5rem; height: 1.5rem; - cursor: pointer; - -webkit-tap-highlight-color: transparent; -} -.theme-switcher .icon { - position: absolute; - transition: transform 0.6s; -} - -.theme-switcher__checkbox { - display: none; -} -.theme-switcher__checkbox:checked ~ .moon-icon { - transform: scale(0) rotate(90deg); -} -.theme-switcher__checkbox:not(:checked) ~ .sun-icon { - transform: scale(0) rotate(-90deg); + width: 1.5rem; } .page, @@ -642,13 +633,11 @@ ol[type="1"] { #home_page { will-change: scroll-position; - overflow-y: auto; - max-height: calc(100vh - 5.2rem); - grid-template-columns: 2rem 1fr; scroll-behavior: smooth; } #floor_line_map { + position: -webkit-sticky; position: sticky; top: 1rem; height: 40vh; @@ -697,7 +686,9 @@ ol[type="1"] { align-items: center; left: 0.2rem; margin-top: -1rem; - user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; transition: transform 0.3s; } @@ -728,10 +719,6 @@ ol[type="1"] { transition: box-shadow 0.3s, opacity 0.3s; } -#floor_container { - width: calc(100% - 1rem); -} - .floor { padding-bottom: 3rem; width: 100%; @@ -899,7 +886,8 @@ ol[type="1"] { border-radius: 0.5rem; height: 10rem; width: 10rem; - object-position: top; + -o-object-position: top; + object-position: top; border-radius: 50%; } @@ -944,12 +932,12 @@ ol[type="1"] { .motivated { color: black; - background-color: #FFCA28; + background-color: #ffca28; } .passionate { color: black; - background-color: #00E676; + background-color: #00e676; } #intern_level_popup { @@ -1011,8 +999,6 @@ ol[type="1"] { } .outlet-label .icon { grid-area: icon; - height: 1.6rem; - width: 1.6rem; fill: var(--accent-color); justify-self: flex-end; } @@ -1199,6 +1185,7 @@ ol[type="1"] { .room-container__header { display: flex; + position: -webkit-sticky; position: sticky; top: 0; z-index: 2; @@ -1221,22 +1208,10 @@ ol[type="1"] { font-weight: calc(700 * var(--font-weight-factor)); } -/* .room-carousel{ - display: flex; - overflow-x: auto; - scroll-snap-type: x mandatory; - height: 100%; - scroll-behavior: smooth; - & > *{ - min-width: 100%; - scroll-snap-align: start; - - } -} */ .room-container__footer { + position: -webkit-sticky; position: sticky; display: flex; - gap: 1rem; bottom: 0; z-index: 2; overflow-x: auto; @@ -1245,6 +1220,9 @@ ol[type="1"] { margin-left: -3rem; background: linear-gradient(0deg, var(--background-color) 70%, rgba(0, 0, 0, 0) 100%); } +.room-container__footer > h4 { + margin-right: 1rem; +} #room_switcher { display: grid; @@ -1405,48 +1383,37 @@ ol[type="1"] { .hide-on-mobile { display: none; } - .outlet-preview { gap: 1.5rem; } - .outlet-preview__number-container { grid-row: 1/2; } - .outlet-preview__number::after { left: 0; } - .outlet-preview__number, .outlet-label__no { font-size: 5rem; } - #outlet_switcher { width: calc(100% - 2rem); } - .outlet-label { grid-row: 1/2; } - .outlet-hero-section { margin-top: 2rem; } - .outlet-label__no { margin-bottom: 2rem; } - .series-container { gap: 1rem; } - .outlet-list__item .icon { margin-left: auto; } - .rooms__header { flex-direction: column; align-items: flex-start; @@ -1454,7 +1421,6 @@ ol[type="1"] { .rooms__header scroll-tab-header { width: calc(100vw - 2rem); } - .room-tile { padding-top: 100%; } @@ -1466,62 +1432,51 @@ ol[type="1"] { padding: 1rem; position: absolute; } - .room-tile__icon { height: 4rem; width: 4rem; } - .investors-icon { height: 6rem; width: 6rem; } - #hero_title { margin-top: 2rem; } - .ext-link-tile { padding: 1rem; flex-direction: column; align-items: flex-start; } - .link-container { margin-top: 1.5rem; } } @media only screen and (min-width: 640px) { - #home_page, .page, + #home_page, +.page, .page-layout { grid-template-columns: 1fr 90vw 1fr; } - .h1 { font-size: 4rem; } - .h2 { font-size: 2.5rem; } - .h3 { font-size: 1.5rem; } - .h4 { font-size: 1.1rem; } - #main_header { padding: 1.2rem 2rem; } - #floor_list { gap: 8vw; padding: 0 8vw 4rem 8vw; } - .floor_list__item { position: relative; grid-template-columns: 1fr 1fr; @@ -1552,7 +1507,6 @@ ol[type="1"] { grid-row: 1/2; grid-column: 1/2; } - .floor__header::before { left: -10%; width: 10%; @@ -1561,11 +1515,9 @@ ol[type="1"] { right: -10%; width: 10%; } - .outlets-container { gap: 1.5rem; } - .outlet-preview { gap: 1rem; padding: 5rem 4rem; @@ -1593,59 +1545,46 @@ ol[type="1"] { .outlet-preview:nth-of-type(odd) .outlet-preview__number::after { right: 0; } - .outlet__title { font-size: 2.5rem; } - #outlet_switcher { padding: 1rem 1.5rem; } - .outlet-label { grid-column: 2/3; justify-self: right; } - .outlet-label__no { justify-content: flex-end; } - .outlet-hero-section { position: relative; grid-template-columns: 1fr auto; gap: 1.5rem; margin-top: 4rem; } - .auto-grid-layout { grid-template-columns: auto 1fr; } - .rooms-layout { grid-template-rows: 1fr 1fr; } - .room-container__header { padding: 1.5rem 0; } - .people-grid { gap: 5rem 3rem; } - #hero_title { font-size: 3rem; } - .feature__title { font-size: 1.5rem; } - .features-grid { grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr)); } - .graph-container { width: 80%; min-height: 60vh; @@ -1653,23 +1592,21 @@ ol[type="1"] { } } @media only screen and (min-width: 1280px) { - #home_page, .page, + #home_page, +.page, .page-layout { grid-template-columns: 1fr 85vw 1fr; } - .grid-3 { justify-content: center; } .grid-3 > .grid { width: 100%; } - .rooms-layout { grid-template-columns: repeat(3, 1fr); grid-auto-flow: column; } - .link-container { grid-template-columns: auto auto; } @@ -1679,7 +1616,6 @@ ol[type="1"] { width: 0.5rem; height: 0.5rem; } - ::-webkit-scrollbar-thumb { background: rgba(var(--text-color), 0.3); border-radius: 1rem; @@ -1687,7 +1623,6 @@ ol[type="1"] { ::-webkit-scrollbar-thumb:hover { background: rgba(var(--text-color), 0.5); } - .page-link { cursor: pointer; transition: color 0.3s; @@ -1698,11 +1633,9 @@ ol[type="1"] { .page-link:hover .icon { fill: var(--accent-color); } - .floor__button:hover { background: var(--background-color); } - .outlet-list__item .icon { fill: var(--accent-color); opacity: 0; @@ -1714,7 +1647,6 @@ ol[type="1"] { opacity: 1; transform: translateX(0); } - .intern__level { transition: transform 0.3s; } diff --git a/assets/css/main.min.css b/assets/css/main.min.css index c8a6466..5127e20 100644 --- a/assets/css/main.min.css +++ b/assets/css/main.min.css @@ -1 +1 @@ -.floor__header,body{background:var(--background-color)}a,button{color:inherit}.outlet-label,sm-tab-header{align-self:flex-start}#room_switcher,.flow-column{grid-auto-flow:column}.hide,.ripple{pointer-events:none}.pos-relative,button{position:relative}.ext-link-tile,.interact,.room-tile,.theme-switcher,button{-webkit-tap-highlight-color:transparent}* :not(ol){padding:0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;font-family:"Roboto Slab",serif}.button__icon--left,.margin-right-0-5{margin-right:.5rem}:root{font-size:clamp(1rem,1.2vmax,3rem)}body{--accent-color:#E72C37;--light-shade:rgba(var(--text-color), 0.06);--text-color:17,17,17;--text-color-light:100,100,100;--foreground-color:255,255,255;--background-color:#F6f6f6;--error-color:red;--green:#007936;--banner-color:#1E88E5;--secondary-text-color:#034baa;--font-weight-factor:1;color:rgba(var(--text-color),1);height:calc(100%)}body[data-theme=dark]{--accent-color:#ff3949;--green:#13ff5a;--text-color:240,240,240;--text-color-light:170,170,170;--foreground-color:20,20,20;--background-color:#0a0a0a;--error-color:rgb(255, 106, 106);--banner-color:#0166be;--secondary-text-color:#4393fc;--font-weight-factor:0.9}body[data-theme=dark] #outlet_switcher{background:linear-gradient(rgba(var(--text-color),.06),rgba(var(--text-color),.06)),rgba(var(--foreground-color),1)}body[data-theme=dark] .outlet-preview{box-shadow:0 4rem 3rem -2rem rgba(0,0,0,.3)}.full-bleed{grid-column:1/4}.h1{font-size:2.5rem}.h2{font-size:2rem}.h3{font-size:1.4rem}.h4{font-size:1rem}.h5{font-size:.8rem}.uppercase{text-transform:uppercase}.capitalize,.floor_list__header,.outlet__title,.person__name{text-transform:capitalize}#my_popup{--width:min(24rem, 100%)}p{font-weight:calc(400 * var(--font-weight-factor));max-width:70ch;line-height:1.6}img{object-fit:cover}a{text-decoration:none}a:focus-visible{box-shadow:0 0 0 .1rem rgba(var(--text-color),1) inset}p a{color:var(--accent-color)}button{overflow:hidden;display:inline-flex;align-items:center;border:none;background:0 0;cursor:pointer;outline:0;font-weight:calc(500 * var(--font-weight-factor))}.button--primary,.tag{background:var(--accent-color)}.button{border-radius:.2rem;padding:.5rem .6rem}.button--primary{color:rgba(var(--foreground-color),1)}.button--primary .icon{fill:rgba(var(--foreground-color),1)}.feature__icon .icon,.icon{fill:rgba(var(--text-color),.9)}.button--outlined{box-shadow:0 0 0 1px rgba(var(--text-color),.5)}.button--filled{background-color:rgba(var(--text-color),.2)}button:focus-visible{outline:solid rgba(var(--text-color),1)}sm-input,sm-textarea{--border-radius:0.2rem;--background:rgba(var(--text-color), 0.06)}sm-button{--border-radius:0.2rem}ul{list-style:none}ol[type="1"]{display:grid;gap:2rem}.accent-color{color:var(--accent-color)}.flex{display:flex}.grid{display:grid}.grid-3{grid-template-columns:repeat(auto-fill,minmax(8rem,1fr))}.gap-0-5{gap:.5rem}.gap-1{gap:1rem}.gap-1-5{gap:1.5rem}.gap-2{gap:2rem}.gap-3{gap:3rem}.text-align-right{text-align:right}.feature,.person-card,.text-center{text-align:center}.align-start{align-items:flex-start}.align-center{align-items:center}.justify-start{justify-content:start}.justify-center{justify-content:center}.justify-right{margin-left:auto}.button__icon--right,.margin-left-0-5{margin-left:.5rem}.align-self-center{align-self:center}.justify-self-center{justify-self:center}.justify-self-start{justify-self:start}.direction-column{flex-direction:column}.space-between{justify-content:space-between}.w-100{width:100%}.margin-top-1-5{margin-top:1.5rem}.margin-bottom-0-5r{margin-bottom:.5rem}.margin-bottom-1r{margin-bottom:1rem}.margin-bottom-1-5r{margin-bottom:1.5rem}.margin-bottom-2r{margin-bottom:2rem}.margin-bottom-3r{margin-bottom:3rem}.margin-bottom-4r{margin-bottom:4rem}.hide{opacity:0}.hide-completely{display:none!important}.no-transformations{transform:none!important}.overflow-ellipsis{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ripple{position:absolute;border-radius:50%;transform:scale(0);background:rgba(var(--text-color),.16)}.interact{position:relative;overflow:hidden;cursor:pointer}.breakable{overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-word;-ms-hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto}.observe-empty-state:empty{display:none}.observe-empty-state:not(:empty)~.empty-state{display:none}.icon{width:1.5rem;height:1.5rem}.icon-only{height:2.6rem;width:2.6rem;padding:.6rem}.close-icon{padding:.3rem}.close-button{left:-.5rem}.button__label{font-size:1rem}.button__icon{height:1.1rem;width:1.1rem}.color-0-9{color:rgba(var(--text-color),.9)}.color-0-8{color:rgba(var(--text-color),.8)}.color-0-7{color:rgba(var(--text-color),.7)}.color-0-3,.floor__num{color:rgba(var(--text-color),.3)}.banner .close-icon,.tile__brief{color:rgba(var(--text-color),.7)}.weight-400{font-weight:calc(400 * var(--font-weight-factor))}.weight-500{font-weight:calc(500 * var(--font-weight-factor))}.outlet-title,.weight-700{font-weight:calc(700 * var(--font-weight-factor))}.weight-900{font-weight:calc(900 * var(--font-weight-factor))}.popup__header{padding:.5rem 1.5rem 0 1rem;display:grid;grid-template-columns:auto 1fr;gap:.5rem;align-items:center;width:100%}.banner{display:grid;gap:1rem;padding:.5rem 0 .5rem 1rem;align-items:center;border:.1rem solid var(--banner-color);grid-template-columns:1fr auto;border-radius:.5rem;margin:0 1rem}.banner .close-icon{width:2.2rem;height:2.2rem}.banner__text{max-width:unset;font-size:.9rem}#elevator_popup{position:absolute;width:100%;height:100%;top:0;left:0;right:0;bottom:0;z-index:15;grid-template-rows:auto 1fr;background:rgba(var(--foreground-color),1)}.elevator__header,.floor_list__header{position:sticky;background:rgba(var(--foreground-color),1);z-index:1;top:0}.elevator__header{padding:1.2rem 1.5rem;display:grid;grid-template-columns:auto 1fr;gap:.5rem;align-items:center;justify-content:flex-start;width:100%}#floor_list{align-content:flex-start;padding:0 1.5rem 4rem;gap:2rem;overflow-y:auto;transform-origin:top}.floor_list__item{display:grid;gap:1.5rem;transform-origin:top}.floor_list__item:last-of-type{padding-bottom:25vh}.floor_list__header{padding-bottom:.5rem}.outlet-list{gap:2rem;counter-reset:outlet-counter}.floor-list__outlet{display:flex;align-items:center}.floor-list__outlet::before{content:"";width:.4rem;height:1.5rem;margin-right:.5rem;background-color:var(--accent-color)}.outlet-list__item{display:grid;user-select:none;width:min(50ch,100%);counter-increment:outlet-counter}.outlet-list__item .outlet-title::before{content:counter(outlet-counter) ". "}.outlet-list__item .icon{fill:var(--accent-color);flex-shrink:0}.outlet-title{font-size:1.2rem;margin-bottom:.5rem}.floor__button,.floor__num{font-weight:calc(900 * var(--font-weight-factor))}.outlet-brief{color:rgba(var(--text-color),.8)}.popup__header__close{padding:.5rem;cursor:pointer}.floor__button{padding:.5rem 0;flex-direction:column;text-align:left;align-items:flex-start;border-radius:.2rem;font-size:1.5rem;background:rgba(var(--foreground-color),1)}.floor__button--active{background:rgba(var(--text-color),.2);box-shadow:0 0 0 .4rem rgba(var(--text-color),1) inset}.floor-name{margin-top:.2rem;font-size:.8rem}.elevator__floor-line{flex:1;height:.1rem;margin-left:2rem;background-color:var(--accent-color)}#main_header{position:relative;padding:1rem;grid-template-columns:repeat(3,1fr)}#elevator_button{justify-self:flex-start;margin-left:-1rem}#elevator_button .icon{width:1.7rem;height:1.7rem}#main_header__logo{height:1.8rem;width:1.8rem}.theme-switcher{position:relative;justify-self:flex-end;width:1.5rem;height:1.5rem;cursor:pointer}.theme-switcher .icon{position:absolute;transition:transform .6s}.theme-switcher__checkbox{display:none}.theme-switcher__checkbox:checked~.moon-icon{transform:scale(0) rotate(90deg)}.theme-switcher__checkbox:not(:checked)~.sun-icon{transform:scale(0) rotate(-90deg)}.page,.page-layout{position:relative;display:grid;grid-template-columns:1rem 1fr 1rem}#floor_line_map,#home_page{grid-template-columns:2rem 1fr}.page-layout>*,.page>*{grid-column:2/3}.page{padding-bottom:4rem}.tag{padding:.4rem .6rem}#home_page{will-change:scroll-position;overflow-y:auto;max-height:calc(100vh - 5.2rem);scroll-behavior:smooth}#floor_line_map{position:sticky;top:1rem;height:40vh;z-index:10;grid-column:1/2}.line-map{height:100%}.line-map__circle{position:absolute;border-radius:1rem;width:1rem;height:1rem;margin-top:-.7rem;background:rgba(var(--foreground-color),1);border:.2rem solid var(--accent-color);transition:transform .1s linear;z-index:5}.line-map__bar{position:relative;width:.1rem;height:100%;border-radius:1rem;background:var(--accent-color)}.line-map__bar::after{position:absolute;content:"";bottom:0;left:50%;transform:translateX(-50%);width:.7rem;height:.2rem;background-color:var(--accent-color)}.floor-label{position:absolute;display:flex;align-items:center;left:.2rem;margin-top:-1rem;user-select:none;transition:transform .3s}.floor-circle{position:relative;border-radius:1rem;padding:.8rem}.floor-circle::after{content:"";position:absolute;padding:.3rem;top:50%;left:50%;transform:translate(-50%,-50%);background:rgba(var(--text-color),1);border-radius:1rem}.floor-title{opacity:.5;font-size:.9rem;white-space:nowrap;padding:.4rem .6rem;margin-left:1rem;border-radius:.2rem;background:rgba(var(--foreground-color),1);transition:box-shadow .3s,opacity .3s}#floor_container{width:calc(100% - 1rem)}.floor{padding-bottom:3rem;width:100%}.floor__header{position:relative;padding:.5rem 0;transform:translateY(-.1rem)}.bit-bond-series__row,.bob-fund__row,.card,.outlet-preview,.starter{background-color:rgba(var(--foreground-color),1)}.floor__num{display:flex;align-items:center;font-size:1.8rem}.outlet-hero-section,.outlet-preview,.table{display:grid}.floor__title{font-size:1.3rem;font-weight:calc(700 * var(--font-weight-factor))}.outlet__title,.svg-outlet-title{font-weight:calc(900 * var(--font-weight-factor))}.big-icon{height:2rem;width:2rem}.outlets-container{margin:1rem 0;gap:1.5rem}.outlet-preview{position:relative;padding:1rem;align-items:center;border-radius:.7rem}.outlet__title{line-height:1.2;max-width:18ch;font-size:1.8rem;margin-bottom:1rem}.svg-outlet-title{height:4rem;margin-bottom:1.5rem;fill:rgba(var(--text-color),1)}.outlet__description{color:rgba(var(--text-color),.8)}.outlet-preview__button{padding:.5rem 0;justify-self:flex-start;color:var(--accent-color);font-weight:calc(700 * var(--font-weight-factor))}.outlet-preview__number{position:relative;line-height:1;font-size:8rem;font-weight:900;-webkit-text-stroke:1rem var(--accent-color);-webkit-text-fill-color:rgba(var(--foreground-color),1);margin:0 .5rem}.outlet-preview__number::after{content:attr(data-number);position:absolute;line-height:1;font-size:1em;font-weight:inherit;-webkit-text-stroke:0;color:rgba(var(--foreground-color),1)}.intern__level,.outlet_switcher__button,.percent-gain{font-weight:calc(500 * var(--font-weight-factor))}.label{position:relative;font-size:.8rem;margin-bottom:.3rem}.value{font-size:1.2rem}.series-container{gap:1.5rem;padding-bottom:1.5rem;grid-template-columns:repeat(auto-fill,minmax(18rem,1fr))}.bit-bond-series__row,.bob-fund__row,.person-card{min-width:100%}.bob-fund__row .grid{align-content:flex-start}.bit-bond-series__row,.bob-fund__row,.card{gap:1rem;padding:1.5rem;border-radius:.5rem;align-items:flex-start;box-shadow:0 .5rem 1rem -.5rem rgba(0,0,0,.1)}.bit-bond-series__row .original-value{font-size:.85rem}.up-arrow{height:1em;width:1em;fill:var(--green);margin-right:.1em}.outlet-label .icon,.room-button[active] .icon{fill:var(--accent-color)}.percent-gain{margin-right:.5em}.percent-gain,.time-elapsed{font-size:.8rem}.time-elapsed{color:rgba(var(--text-color),.8)}.person-card{position:relative;gap:1rem;justify-items:center;align-content:flex-start;grid-template-columns:1fr}.person__image{height:10rem;width:10rem;object-position:top;border-radius:50%}.person__name{font-size:.9rem}.investor__bio,.investor__contribution{font-size:.85rem}.investor__bio{margin-top:.5rem}.intern-flo-id{margin-top:.3rem;font-size:.75rem}.intern__project{margin-top:.5rem}.intern__level{position:absolute;cursor:pointer;font-size:.8rem;border-radius:.2rem;margin-bottom:.3rem;padding:.3rem .5rem;justify-self:flex-end;box-shadow:0 .1rem .2rem rgba(0,0,0,.2)}.motivated{color:#000;background-color:#FFCA28}.passionate{color:#000;background-color:#00E676}#intern_level_popup{--width:min(48rem, 100%)}.table{gap:1rem;grid-template-columns:6rem 1fr}.table p{font-size:.9rem;color:rgba(var(--text-color),.9)}#outlet_switcher{position:absolute;top:0;padding:1rem;border-radius:.3rem;background:rgba(var(--foreground-color),1);box-shadow:0 2rem 4rem -1rem rgba(0,0,0,.2);z-index:2;outline:0}.ext-link-tile,.feature,.outlet-label__no,.room-button,.room-tile,.room__label,.rooms-layout,.timeline-item{position:relative}.outlet_switcher__floor{display:flex;flex-direction:column;overflow-y:auto}.outlet_switcher__button{display:flex;align-items:center;font-size:1rem;padding:.6rem 0}.outlet_switcher__button--active{color:var(--accent-color)!important}.outlet-label{display:grid;gap:.5rem;text-align:left;align-items:center;min-width:8rem;font-size:1.1rem;margin-bottom:.5rem;grid-template-areas:"label icon" "num num"}.outlet-label .icon{grid-area:icon;height:1.6rem;width:1.6rem;justify-self:flex-end}.outlet-label__name{font-size:1.7rem;color:rgba(var(--text-color),.5);font-weight:calc(900 * var(--font-weight-factor))}.outlet-label__no{grid-area:num;display:flex;line-height:1;font-size:8rem;font-weight:900;-webkit-text-stroke:1rem var(--accent-color);-webkit-text-fill-color:var(--background-color);margin:0 .5rem}.outlet-label__no::after{content:attr(data-number);position:absolute;line-height:1;font-size:1em;font-weight:inherit;-webkit-text-stroke:0;color:var(--background-color)}#hero_title,.room__label{font-weight:calc(700 * var(--font-weight-factor))}.auto-grid-layout{justify-content:flex-start;overflow-x:auto}.grid-2{grid-template-columns:auto 1fr}.rooms__header{z-index:1;display:flex;align-items:center;margin-bottom:1.5rem;background:var(--background-color);box-shadow:0 1rem 1rem -1rem rgba(0,0,0,.2)}.room__label{display:flex;align-items:center;padding-right:1.5rem;font-size:1.5rem}.room-button{opacity:.6;flex-shrink:0;border-radius:0;font-weight:calc(500 * var(--font-weight-factor));font-size:1.1rem;transition:opacity .3s,background-color .3s;padding:.6rem .8rem}.room-button:not(:last-of-type)::after{content:"";height:.1rem;width:4rem;margin-left:1rem;align-self:center;background:var(--accent-color)}#expanding_tile,.room-tile{background-color:rgba(var(--foreground-color),1)}.room-button[active]{opacity:1;color:var(--accent-color)}.people-grid{display:grid;gap:3rem 1.5rem;grid-template-columns:repeat(auto-fill,minmax(13rem,1fr))}.rooms-layout{display:grid;gap:1rem;grid-template-columns:1fr 1fr;margin-bottom:4rem}.room-tile{display:flex;border-radius:.5rem;transition:transform .3s;box-shadow:0 1rem 3rem -1rem rgba(0,0,0,.1)}.room-tile--main{padding-top:100%;grid-row:span 2}.room-tile--main .tile-content{position:absolute;bottom:0}.room-tile .tile-content{display:flex;width:100%;height:100%;padding:1.5rem;align-self:flex-end;flex-direction:column}.room-tile:active{transform:scale(.95)}.room-tile__icon{position:absolute;height:6rem;width:6rem;top:50%;left:50%;transform:translate(-50%,-50%)}.room-tile__icon:not(.room-tile__icon--colored){fill:rgba(var(--text-color),.1)}.investors-icon{height:8rem;width:8rem}.room-tile__title{font-size:.9rem;padding:.4rem .8rem;border:.1rem solid var(--secondary-text-color);color:var(--secondary-text-color);border-radius:.3rem}#performance_preview{margin-top:auto}#performance_preview>*{padding:0;box-shadow:none}#expanding_tile{position:fixed;border-radius:.5rem;z-index:5}.room-container{position:fixed;top:0;bottom:0;left:0;right:0;z-index:6;overflow-y:auto;background-color:var(--background-color);grid-template-rows:auto auto 1fr auto;align-items:flex-start}.room{padding-bottom:4rem}.room-container__header{display:flex;position:sticky;top:0;z-index:2;background-color:inherit;padding:1rem 0}.room-container__header::before{position:absolute;content:"";width:1rem;height:100%;left:-1rem;top:0;background-color:inherit}#hero_title{font-size:2rem;margin-bottom:2rem}.room-container__footer{position:sticky;display:flex;gap:1rem;bottom:0;z-index:2;overflow-x:auto;align-items:center;padding:2rem .5rem .5rem 3rem;margin-left:-3rem;background:linear-gradient(0deg,var(--background-color) 70%,rgba(0,0,0,0) 100%)}#room_switcher{display:grid;gap:.5rem;justify-content:flex-start}.room-shortcut .room-tile__title{font-weight:500;font-size:.9rem}.ext-link-tile{display:flex;padding:1.5rem;border-radius:.5rem;background-size:contain;align-items:center;justify-content:space-between;border:.1rem solid var(--banner-color);box-shadow:0 1rem 3rem -1rem rgba(0,0,0,.2);overflow:hidden}.tile__title{font-size:1.25rem;line-height:1;font-weight:calc(500 * var(--font-weight-factor));z-index:1}.tile__brief{margin-top:1rem;z-index:1}.round{display:inline-flex;flex-shrink:0;padding:.4rem 1rem;border-radius:.3rem;color:#fff;background-color:var(--banner-color);font-weight:700!important;font-size:1rem;z-index:1}.timeline-container{display:grid;padding:3rem 0;gap:4rem}.timeline-item{display:grid;padding-left:1rem}.timeline-item:not(:last-of-type):before{content:"";position:absolute;width:.1rem;height:calc(100% + 4rem);top:0;left:0;background-color:rgba(var(--text-color),.7)}.timeline-item:after{content:"";position:absolute;height:.6rem;width:.6rem;border-radius:50%;top:0;left:-.25rem;background-color:rgba(var(--text-color),1)}.timeline-item__header{display:flex;font-size:.8rem;padding:.5rem .8rem;border-radius:.2rem;justify-self:flex-start;transform:translateY(-.8rem);box-shadow:0 0 0 1px rgba(var(--text-color),.6);background-color:rgba(var(--foreground-color),1)}.features-grid{display:grid;gap:3rem 2rem;margin-bottom:5rem}.feature{display:flex;flex-direction:column;align-items:center;bottom:0;left:0;width:100%;height:100%}.feature__icon{display:flex;align-items:center;margin-bottom:1rem;padding:1.5rem;border-radius:50%;background-color:rgba(var(--text-color),.06)}.feature__icon .icon{height:2.5rem;width:2.5rem}.feature__title{color:rgba(var(--text-color),.9);font-size:1.2rem;margin-bottom:.5rem}.feature__brief{font-size:.9rem;color:rgba(var(--text-color),.8)}#line_sample{width:2rem;height:.2rem;margin-right:1rem;background:linear-gradient(90deg,#f49080,#80b6f4)}.graph-container{min-height:16rem;margin:1rem 0 4rem}.link-container{display:grid;gap:1rem;justify-items:flex-start;align-items:center}@media only screen and (max-width:640px){.outlet-label,.outlet-preview__number-container{grid-row:1/2}#hero_title,.outlet-hero-section{margin-top:2rem}.hide-on-mobile{display:none}.outlet-preview{gap:1.5rem}.outlet-preview__number::after{left:0}.outlet-label__no,.outlet-preview__number{font-size:5rem}#outlet_switcher{width:calc(100% - 2rem)}.outlet-label__no{margin-bottom:2rem}.series-container{gap:1rem}.outlet-list__item .icon{margin-left:auto}.rooms__header{flex-direction:column;align-items:flex-start}.rooms__header scroll-tab-header{width:calc(100vw - 2rem)}.room-tile{padding-top:100%}.room-tile--main{grid-column:span 2}.room-tile .tile-content{top:0;padding:1rem;position:absolute}.room-tile__icon{height:4rem;width:4rem}.investors-icon{height:6rem;width:6rem}.ext-link-tile{padding:1rem;flex-direction:column;align-items:flex-start}.link-container{margin-top:1.5rem}}@media only screen and (min-width:640px){#home_page,.page,.page-layout{grid-template-columns:1fr 90vw 1fr}.h1{font-size:4rem}.h2{font-size:2.5rem}.h3{font-size:1.5rem}.h4{font-size:1.1rem}#main_header{padding:1.2rem 2rem}#floor_list{gap:8vw;padding:0 8vw 4rem}.floor_list__item{position:relative;grid-template-columns:1fr 1fr;align-items:center;justify-content:center}.floor_list__item .floor_list__header{display:grid}.floor_list__item:not(:last-of-type){padding-bottom:8vw}.floor_list__item:not(:last-of-type)::after{content:"";position:absolute;width:24rem;height:.2rem;bottom:0;background-color:var(--accent-color);justify-self:center}.floor_list__item:nth-of-type(odd) .floor_list__header{text-align:right;grid-column:2/3;grid-row:1/2}.floor_list__item:nth-of-type(odd) .outlet-list{grid-row:1/2;grid-column:1/2}.floor__header::before{left:-10%;width:10%}.floor__header::after{right:-10%;width:10%}.outlets-container{gap:1.5rem}.outlet-preview{gap:1rem;padding:5rem 4rem;grid-template-columns:1.2fr 1fr;border:1px solid rgba(0,0,0,.2);box-shadow:0 4rem 3rem -2rem rgba(0,0,0,.06)}.outlet-preview:nth-of-type(even){grid-template-columns:1fr 2fr}.outlet-preview:nth-of-type(even) .outlet-preview__info{grid-column:2/3}.outlet-preview:nth-of-type(even) .outlet-preview__number-container{grid-column:1/2;grid-row:1/2}.outlet-preview:nth-of-type(even) .outlet-preview__number::after{left:0}.outlet-preview:nth-of-type(odd) .outlet-preview__number-container{margin-left:auto;text-align:right}.outlet-preview:nth-of-type(odd) .outlet-preview__number::after{right:0}.outlet__title{font-size:2.5rem}#outlet_switcher{padding:1rem 1.5rem}.outlet-label{grid-column:2/3;justify-self:right}.outlet-label__no{justify-content:flex-end}.outlet-hero-section{position:relative;grid-template-columns:1fr auto;gap:1.5rem;margin-top:4rem}.auto-grid-layout{grid-template-columns:auto 1fr}.rooms-layout{grid-template-rows:1fr 1fr}.room-container__header{padding:1.5rem 0}.people-grid{gap:5rem 3rem}#hero_title{font-size:3rem}.feature__title{font-size:1.5rem}.features-grid{grid-template-columns:repeat(auto-fill,minmax(20rem,1fr))}.graph-container{width:80%;min-height:60vh;justify-self:center}}@media only screen and (min-width:1280px){#home_page,.page,.page-layout{grid-template-columns:1fr 85vw 1fr}.grid-3{justify-content:center}.grid-3>.grid{width:100%}.rooms-layout{grid-template-columns:repeat(3,1fr);grid-auto-flow:column}.link-container{grid-template-columns:auto auto}}@media (any-hover:hover){.outlet-list__item .icon,.page-link:hover .icon{fill:var(--accent-color)}::-webkit-scrollbar{width:.5rem;height:.5rem}::-webkit-scrollbar-thumb{background:rgba(var(--text-color),.3);border-radius:1rem}::-webkit-scrollbar-thumb:hover{background:rgba(var(--text-color),.5)}.page-link{cursor:pointer;transition:color .3s}.page-link:hover{color:var(--accent-color)}.floor__button:hover{background:var(--background-color)}.outlet-list__item .icon{opacity:0;transform-origin:left;transform:translateX(-.5rem);transition:opacity .3s,transform .3s}.outlet-list__item:hover .icon{opacity:1;transform:translateX(0)}.intern__level{transition:transform .3s}.intern__level:hover{transform:scale(1.1)}} \ No newline at end of file +* :not(ol){padding:0;margin:0;box-sizing:border-box;font-family:"Roboto Slab",serif}:root{font-size:clamp(1rem,1.2vmax,3rem)}body{--accent-color: #e72c37;--light-shade: rgba(var(--text-color), 0.06);--text-color: 17, 17, 17;--text-color-light: 100, 100, 100;--foreground-color: 255, 255, 255;--background-color: #f6f6f6;--error-color: red;--green: #007936;--banner-color: #1e88e5;--secondary-text-color: #034baa;--font-weight-factor: 1;color:rgba(var(--text-color), 1);height:100%;background:var(--background-color)}body[data-theme=dark]{--accent-color: #ff3949;--green: #13ff5a;--text-color: 240, 240, 240;--text-color-light: 170, 170, 170;--foreground-color: 20, 20, 20;--background-color: #0a0a0a;--error-color: rgb(255, 106, 106);--banner-color: #0166be;--secondary-text-color: #4393fc;--font-weight-factor: 0.9}body[data-theme=dark] #outlet_switcher{background:linear-gradient(rgba(var(--text-color), 0.06), rgba(var(--text-color), 0.06)),rgba(var(--foreground-color), 1)}body[data-theme=dark] .outlet-preview{box-shadow:0 4rem 3rem -2rem rgba(0,0,0,.3)}.full-bleed{grid-column:1/4}.h1{font-size:2.5rem}.h2{font-size:2rem}.h3{font-size:1.4rem}.h4{font-size:1rem}.h5{font-size:.8rem}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}#my_popup{--width: min(24rem, 100%)}p{font-weight:calc(400*var(--font-weight-factor));max-width:70ch;line-height:1.6}img{-o-object-fit:cover;object-fit:cover}a{color:inherit;text-decoration:none}a:focus-visible{box-shadow:0 0 0 .1rem rgba(var(--text-color), 1) inset}p a{color:var(--accent-color)}button{position:relative;overflow:hidden;display:inline-flex;align-items:center;border:none;background:none;cursor:pointer;outline:none;color:inherit;font-weight:calc(500*var(--font-weight-factor));-webkit-tap-highlight-color:rgba(0,0,0,0)}.button{border-radius:.2rem;padding:.5rem .6rem}.button--primary{background:var(--accent-color);color:rgba(var(--foreground-color), 1)}.button--primary .icon{fill:rgba(var(--foreground-color), 1)}.button--outlined{box-shadow:0 0 0 1px rgba(var(--text-color), 0.5)}.button--filled{background-color:rgba(var(--text-color), 0.2)}button:focus-visible{outline:rgba(var(--text-color), 1) .1rem solid}sm-input,sm-textarea{--border-radius: 0.2rem;--background: rgba(var(--text-color), 0.06)}sm-button{--border-radius: 0.2rem}sm-tab-header{align-self:flex-start}ul{list-style:none}ol[type="1"]{display:grid;gap:2rem}.accent-color{color:var(--accent-color)}.flex{display:flex}.flex-wrap{flex-wrap:wrap}.grid{display:grid}.grid-3{grid-template-columns:repeat(auto-fill, minmax(8rem, 1fr))}.flow-column{grid-auto-flow:column}.gap-0-5{gap:.5rem}.gap-1{gap:1rem}.gap-1-5{gap:1.5rem}.gap-2{gap:2rem}.gap-3{gap:3rem}.pos-relative{position:relative}.text-align-right{text-align:right}.align-start{align-items:flex-start}.align-center{align-items:center}.text-center{text-align:center}.justify-start{justify-content:start}.justify-center{justify-content:center}.justify-right{margin-left:auto}.align-self-center{align-self:center}.justify-self-center{justify-self:center}.justify-self-start{justify-self:start}.direction-column{flex-direction:column}.space-between{justify-content:space-between}.w-100{width:100%}.margin-top-1-5{margin-top:1.5rem}.margin-bottom-0-5r{margin-bottom:.5rem}.margin-bottom-1r{margin-bottom:1rem}.margin-bottom-1-5r{margin-bottom:1.5rem}.margin-bottom-2r{margin-bottom:2rem}.margin-bottom-3r{margin-bottom:3rem}.margin-bottom-4r{margin-bottom:4rem}.margin-left-0-5{margin-left:.5rem}.margin-right-0-5{margin-right:.5rem}.hide{opacity:0;pointer-events:none}.hide-completely{display:none !important}.no-transformations{transform:none !important}.overflow-ellipsis{width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ripple{position:absolute;border-radius:50%;transform:scale(0);background:rgba(var(--text-color), 0.16);pointer-events:none}.interact{position:relative;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.breakable{overflow-wrap:break-word;word-wrap:break-word;-ms-word-break:break-all;word-break:break-word;-webkit-hyphens:auto;hyphens:auto}.observe-empty-state:empty{display:none}.observe-empty-state:not(:empty)~.empty-state{display:none}.icon{width:1.2rem;height:1.2rem;fill:rgba(var(--text-color), 0.9)}.icon-only{height:2.6rem;width:2.6rem;padding:.6rem}.close-icon{padding:.3rem}.close-button{left:-0.5rem}.button__label{font-size:1rem}.button__icon{height:1.1rem;width:1.1rem}.button__icon--left{margin-right:.5rem}.button__icon--right{margin-left:.5rem}.color-0-9{color:rgba(var(--text-color), 0.9)}.color-0-8{color:rgba(var(--text-color), 0.8)}.color-0-7{color:rgba(var(--text-color), 0.7)}.color-0-3{color:rgba(var(--text-color), 0.3)}.weight-400{font-weight:calc(400*var(--font-weight-factor))}.weight-500{font-weight:calc(500*var(--font-weight-factor))}.weight-700{font-weight:calc(700*var(--font-weight-factor))}.weight-900{font-weight:calc(900*var(--font-weight-factor))}.popup__header{padding:.5rem 1.5rem 0 1rem;display:grid;grid-template-columns:auto 1fr;gap:.5rem;align-items:center;width:100%}.popup__header__close{padding:.5rem;cursor:pointer}.banner{display:grid;gap:1rem;padding:.5rem 0 .5rem 1rem;align-items:center;border:.1rem solid var(--banner-color);grid-template-columns:1fr auto;border-radius:.5rem;margin:0 1rem}.banner .close-icon{width:2.2rem;height:2.2rem;color:rgba(var(--text-color), 0.7)}.banner__text{max-width:unset;font-size:.9rem}#elevator_popup{position:fixed;width:100%;height:100%;top:0;left:0;right:0;bottom:0;z-index:15;grid-template-rows:auto 1fr;background:rgba(var(--foreground-color), 1)}.elevator__header{position:-webkit-sticky;position:sticky;top:0;padding:1.2rem 1.5rem;display:grid;grid-template-columns:auto 1fr;gap:.5rem;align-items:center;justify-content:flex-start;width:100%;background:rgba(var(--foreground-color), 1);z-index:1}#floor_list{align-content:flex-start;padding:0 1.5rem 4rem 1.5rem;gap:2rem;overflow-y:auto;transform-origin:top}.floor_list__item{display:grid;gap:1.5rem;transform-origin:top}.floor_list__item:last-of-type{padding-bottom:25vh}.floor_list__header{position:-webkit-sticky;position:sticky;top:0;padding-bottom:.5rem;background:rgba(var(--foreground-color), 1);z-index:1;text-transform:capitalize}.outlet-list{gap:2rem;counter-reset:outlet-counter}.floor-list__outlet{display:flex;align-items:center}.floor-list__outlet::before{content:"";width:.4rem;height:1.5rem;margin-right:.5rem;background-color:var(--accent-color)}.outlet-list__item{display:grid;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:min(50ch,100%);counter-increment:outlet-counter}.outlet-list__item .outlet-title::before{content:counter(outlet-counter) ". "}.outlet-list__item .icon{fill:var(--accent-color);flex-shrink:0}.outlet-title{font-size:1.2rem;font-weight:calc(700*var(--font-weight-factor));margin-bottom:.5rem}.outlet-brief{color:rgba(var(--text-color), 0.8)}.popup__header__close{padding:.5rem;cursor:pointer}.floor__button{padding:.5rem 0;flex-direction:column;text-align:left;align-items:flex-start;border-radius:.2rem;font-size:1.5rem;font-weight:calc(900*var(--font-weight-factor));background:rgba(var(--foreground-color), 1)}.floor__button--active{background:rgba(var(--text-color), 0.2);box-shadow:0 0 0 .4rem rgba(var(--text-color), 1) inset}.floor-name{margin-top:.2rem;font-size:.8rem}.elevator__floor-line{flex:1;height:.1rem;margin-left:2rem;background-color:var(--accent-color)}#main_header{position:-webkit-sticky;position:sticky;top:0;z-index:1;background:var(--background-color);display:flex;align-items:center;justify-content:space-between;padding:1rem}#elevator_button{justify-self:flex-start;margin-left:-1rem}.main-logo{position:absolute;left:50%;transform:translateX(-50%)}#main_header__logo{height:1.5rem;width:1.5rem}.page,.page-layout{position:relative;display:grid;grid-template-columns:1rem 1fr 1rem}.page>*,.page-layout>*{grid-column:2/3}.page{padding-bottom:4rem}.tag{background:var(--accent-color);padding:.4rem .6rem}#home_page{will-change:scroll-position;scroll-behavior:smooth}#floor_line_map{position:-webkit-sticky;position:sticky;top:1rem;height:40vh;z-index:10;grid-template-columns:2rem 1fr;grid-column:1/2}.line-map{height:100%}.line-map__circle{position:absolute;border-radius:1rem;width:1rem;height:1rem;margin-top:-0.7rem;background:rgba(var(--foreground-color), 1);border:solid .2rem var(--accent-color);transition:transform .1s linear;z-index:5}.line-map__bar{position:relative;width:.1rem;height:100%;border-radius:1rem;background:var(--accent-color)}.line-map__bar::after{position:absolute;content:"";bottom:0;left:50%;transform:translateX(-50%);width:.7rem;height:.2rem;background-color:var(--accent-color)}.floor-label{position:absolute;display:flex;align-items:center;left:.2rem;margin-top:-1rem;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:transform .3s}.floor-circle{position:relative;border-radius:1rem;padding:.8rem}.floor-circle::after{content:"";position:absolute;padding:.3rem;top:50%;left:50%;transform:translate(-50%, -50%);background:rgba(var(--text-color), 1);border-radius:1rem}.floor-title{opacity:.5;font-size:.9rem;white-space:nowrap;padding:.4rem .6rem;margin-left:1rem;border-radius:.2rem;background:rgba(var(--foreground-color), 1);transition:box-shadow .3s,opacity .3s}.floor{padding-bottom:3rem;width:100%}.floor__header{position:relative;padding:.5rem 0;transform:translateY(-0.1rem);background:var(--background-color)}.floor__num{display:flex;align-items:center;font-size:1.8rem;font-weight:calc(900*var(--font-weight-factor));color:rgba(var(--text-color), 0.3)}.floor__title{font-size:1.3rem;font-weight:calc(700*var(--font-weight-factor))}.big-icon{height:2rem;width:2rem}.outlets-container{margin:1rem 0;gap:1.5rem}.outlet-preview{position:relative;display:grid;padding:1rem;align-items:center;border-radius:.7rem;background-color:rgba(var(--foreground-color), 1)}.outlet__title{line-height:1.2;max-width:18ch;font-size:1.8rem;margin-bottom:1rem;text-transform:capitalize;font-weight:calc(900*var(--font-weight-factor))}.svg-outlet-title{height:4rem;margin-bottom:1.5rem;fill:rgba(var(--text-color), 1);font-weight:calc(900*var(--font-weight-factor))}.outlet__description{color:rgba(var(--text-color), 0.8)}.outlet-preview__button{padding:.5rem 0;justify-self:flex-start;color:var(--accent-color);font-weight:calc(700*var(--font-weight-factor))}.outlet-preview__number{position:relative;line-height:1;font-size:8rem;font-weight:900;-webkit-text-stroke:1rem var(--accent-color);-webkit-text-fill-color:rgba(var(--foreground-color), 1);margin:0 .5rem}.outlet-preview__number::after{content:attr(data-number);position:absolute;line-height:1;font-size:1em;font-weight:inherit;-webkit-text-stroke:0;color:rgba(var(--foreground-color), 1)}.label{position:relative;font-size:.8rem;margin-bottom:.3rem}.value{font-size:1.2rem}.series-container{gap:1.5rem;padding-bottom:1.5rem;grid-template-columns:repeat(auto-fill, minmax(18rem, 1fr))}.bit-bond-series__row,.bob-fund__row,.person-card{min-width:100%}.bob-fund__row .grid{align-content:flex-start}.bob-fund__row,.bit-bond-series__row,.card{gap:1rem;padding:1.5rem;border-radius:.5rem;align-items:flex-start;background-color:rgba(var(--foreground-color), 1);box-shadow:0 .5rem 1rem -0.5rem rgba(0,0,0,.1)}.bit-bond-series__row .original-value{font-size:.85rem}.up-arrow{height:1em;width:1em;fill:var(--green);margin-right:.1em}.percent-gain{margin-right:.5em;font-weight:calc(500*var(--font-weight-factor))}.percent-gain,.time-elapsed{font-size:.8rem}.time-elapsed{color:rgba(var(--text-color), 0.8)}.person-card{position:relative;gap:1rem;text-align:center;justify-items:center;align-content:flex-start;grid-template-columns:1fr}.person__image{width:100%;height:auto;border-radius:.5rem;height:10rem;width:10rem;-o-object-position:top;object-position:top;border-radius:50%}.person__name{font-size:.9rem;text-transform:capitalize}.investor__bio{font-size:.85rem;margin-top:.5rem}.investor__contribution{font-size:.85rem}.intern-flo-id{margin-top:.3rem;font-size:.75rem}.intern__project{margin-top:.5rem}.intern__level{position:absolute;cursor:pointer;font-size:.8rem;border-radius:.2rem;margin-bottom:.3rem;padding:.3rem .5rem;justify-self:flex-end;font-weight:calc(500*var(--font-weight-factor));box-shadow:0 .1rem .2rem rgba(0,0,0,.2)}.starter{background-color:rgba(var(--foreground-color), 1)}.motivated{color:#000;background-color:#ffca28}.passionate{color:#000;background-color:#00e676}#intern_level_popup{--width: min(48rem, 100%)}.table{display:grid;gap:1rem;grid-template-columns:6rem 1fr}.table p{font-size:.9rem;color:rgba(var(--text-color), 0.9)}.outlet-hero-section{display:grid}#outlet_switcher{position:absolute;top:0;padding:1rem;border-radius:.3rem;background:rgba(var(--foreground-color), 1);box-shadow:0 2rem 4rem -1rem rgba(0,0,0,.2);z-index:2;outline:none}.outlet_switcher__floor{display:flex;flex-direction:column;overflow-y:auto}.outlet_switcher__button{display:flex;align-items:center;font-size:1rem;padding:.6rem 0;font-weight:calc(500*var(--font-weight-factor))}.outlet_switcher__button--active{color:var(--accent-color) !important}.outlet-label{display:grid;gap:.5rem;text-align:left;align-items:center;min-width:8rem;font-size:1.1rem;margin-bottom:.5rem;align-self:flex-start;grid-template-areas:"label icon" "num num"}.outlet-label .icon{grid-area:icon;fill:var(--accent-color);justify-self:flex-end}.outlet-label__name{font-size:1.7rem;color:rgba(var(--text-color), 0.5);font-weight:calc(900*var(--font-weight-factor))}.outlet-label__no{grid-area:num;display:flex;position:relative;line-height:1;font-size:8rem;font-weight:900;-webkit-text-stroke:1rem var(--accent-color);-webkit-text-fill-color:var(--background-color);margin:0 .5rem}.outlet-label__no::after{content:attr(data-number);position:absolute;line-height:1;font-size:1em;font-weight:inherit;-webkit-text-stroke:0;color:var(--background-color)}.auto-grid-layout{justify-content:flex-start;overflow-x:auto}.grid-2{grid-template-columns:auto 1fr}.rooms__header{z-index:1;display:flex;align-items:center;margin-bottom:1.5rem;background:var(--background-color);box-shadow:0 1rem 1rem -1rem rgba(0,0,0,.2)}.room__label{position:relative;display:flex;align-items:center;font-weight:calc(700*var(--font-weight-factor));padding-right:1.5rem;font-size:1.5rem}.room-button{position:relative;opacity:.6;flex-shrink:0;border-radius:0;font-weight:calc(500*var(--font-weight-factor));font-size:1.1rem;transition:opacity .3s,background-color .3s;padding:.6rem .8rem}.room-button:not(:last-of-type)::after{content:"";height:.1rem;width:4rem;margin-left:1rem;align-self:center;background:var(--accent-color)}.room-button[active]{opacity:1;color:var(--accent-color)}.room-button[active] .icon{fill:var(--accent-color)}.people-grid{display:grid;gap:3rem 1.5rem;grid-template-columns:repeat(auto-fill, minmax(13rem, 1fr))}.rooms-layout{position:relative;display:grid;gap:1rem;grid-template-columns:1fr 1fr;margin-bottom:4rem}.room-tile{display:flex;position:relative;border-radius:.5rem;transition:transform .3s;background-color:rgba(var(--foreground-color), 1);box-shadow:0 1rem 3rem -1rem rgba(0,0,0,.1);-webkit-tap-highlight-color:rgba(0,0,0,0)}.room-tile--main{padding-top:100%;grid-row:span 2}.room-tile--main .tile-content{position:absolute;bottom:0}.room-tile .tile-content{display:flex;width:100%;height:100%;padding:1.5rem;align-self:flex-end;flex-direction:column}.room-tile:active{transform:scale(0.95)}.room-tile__icon{position:absolute;height:6rem;width:6rem;top:50%;left:50%;transform:translate(-50%, -50%)}.room-tile__icon:not(.room-tile__icon--colored){fill:rgba(var(--text-color), 0.1)}.investors-icon{height:8rem;width:8rem}.room-tile__title{font-size:.9rem;padding:.4rem .8rem;border:solid .1rem var(--secondary-text-color);color:var(--secondary-text-color);border-radius:.3rem}#performance_preview{margin-top:auto}#performance_preview>*{padding:0;box-shadow:none}#expanding_tile{position:fixed;border-radius:.5rem;background-color:rgba(var(--foreground-color), 1);z-index:5}.room-container{position:fixed;top:0;bottom:0;left:0;right:0;z-index:6;overflow-y:auto;background-color:var(--background-color);grid-template-rows:auto auto 1fr auto;align-items:flex-start}.room{padding-bottom:4rem}.room-container__header{display:flex;position:-webkit-sticky;position:sticky;top:0;z-index:2;background-color:inherit;padding:1rem 0}.room-container__header::before{position:absolute;content:"";width:1rem;height:100%;left:-1rem;top:0;background-color:inherit}#hero_title{font-size:2rem;margin-bottom:2rem;font-weight:calc(700*var(--font-weight-factor))}.room-container__footer{position:-webkit-sticky;position:sticky;display:flex;bottom:0;z-index:2;overflow-x:auto;align-items:center;padding:2rem .5rem .5rem 3rem;margin-left:-3rem;background:linear-gradient(0deg, var(--background-color) 70%, rgba(0, 0, 0, 0) 100%)}.room-container__footer>h4{margin-right:1rem}#room_switcher{display:grid;gap:.5rem;grid-auto-flow:column;justify-content:flex-start}.room-shortcut .room-tile__title{font-weight:500;font-size:.9rem}.ext-link-tile{position:relative;display:flex;padding:1.5rem;border-radius:.5rem;background-size:contain;align-items:center;justify-content:space-between;border:solid .1rem var(--banner-color);box-shadow:0 1rem 3rem -1rem rgba(0,0,0,.2);-webkit-tap-highlight-color:rgba(0,0,0,0);overflow:hidden}.tile__title{font-size:1.25rem;line-height:1;font-weight:calc(500*var(--font-weight-factor));z-index:1}.tile__brief{margin-top:1rem;z-index:1;color:rgba(var(--text-color), 0.7)}.round{display:inline-flex;flex-shrink:0;padding:.4rem 1rem;border-radius:.3rem;color:#fff;background-color:var(--banner-color);font-weight:700 !important;font-size:1rem;z-index:1}.timeline-container{display:grid;padding:3rem 0;gap:4rem}.timeline-item{position:relative;display:grid;padding-left:1rem}.timeline-item:not(:last-of-type):before{content:"";position:absolute;width:.1rem;height:calc(100% + 4rem);top:0;left:0;background-color:rgba(var(--text-color), 0.7)}.timeline-item:after{content:"";position:absolute;height:.6rem;width:.6rem;border-radius:50%;top:0;left:-0.25rem;background-color:rgba(var(--text-color), 1)}.timeline-item__header{display:flex;font-size:.8rem;padding:.5rem .8rem;border-radius:.2rem;justify-self:flex-start;transform:translateY(-0.8rem);box-shadow:0 0 0 1px rgba(var(--text-color), 0.6);background-color:rgba(var(--foreground-color), 1)}.features-grid{display:grid;gap:3rem 2rem;margin-bottom:5rem}.feature{display:flex;position:relative;flex-direction:column;align-items:center;text-align:center;bottom:0;left:0;width:100%;height:100%}.feature__icon{display:flex;align-items:center;margin-bottom:1rem;padding:1.5rem;border-radius:50%;background-color:rgba(var(--text-color), 0.06)}.feature__icon .icon{height:2.5rem;width:2.5rem;fill:rgba(var(--text-color), 0.9)}.feature__title{color:rgba(var(--text-color), 0.9);font-size:1.2rem;margin-bottom:.5rem}.feature__brief{font-size:.9rem;color:rgba(var(--text-color), 0.8)}#line_sample{width:2rem;height:.2rem;margin-right:1rem;background:linear-gradient(90deg, #f49080, #80b6f4)}.graph-container{min-height:16rem;margin:1rem 0 4rem 0}.link-container{display:grid;gap:1rem;justify-items:flex-start;align-items:center}@media only screen and (max-width: 640px){.hide-on-mobile{display:none}.outlet-preview{gap:1.5rem}.outlet-preview__number-container{grid-row:1/2}.outlet-preview__number::after{left:0}.outlet-preview__number,.outlet-label__no{font-size:5rem}#outlet_switcher{width:calc(100% - 2rem)}.outlet-label{grid-row:1/2}.outlet-hero-section{margin-top:2rem}.outlet-label__no{margin-bottom:2rem}.series-container{gap:1rem}.outlet-list__item .icon{margin-left:auto}.rooms__header{flex-direction:column;align-items:flex-start}.rooms__header scroll-tab-header{width:calc(100vw - 2rem)}.room-tile{padding-top:100%}.room-tile--main{grid-column:span 2}.room-tile .tile-content{top:0;padding:1rem;position:absolute}.room-tile__icon{height:4rem;width:4rem}.investors-icon{height:6rem;width:6rem}#hero_title{margin-top:2rem}.ext-link-tile{padding:1rem;flex-direction:column;align-items:flex-start}.link-container{margin-top:1.5rem}}@media only screen and (min-width: 640px){#home_page,.page,.page-layout{grid-template-columns:1fr 90vw 1fr}.h1{font-size:4rem}.h2{font-size:2.5rem}.h3{font-size:1.5rem}.h4{font-size:1.1rem}#main_header{padding:1.2rem 2rem}#floor_list{gap:8vw;padding:0 8vw 4rem 8vw}.floor_list__item{position:relative;grid-template-columns:1fr 1fr;align-items:center;justify-content:center}.floor_list__item .floor_list__header{display:grid}.floor_list__item:not(:last-of-type){padding-bottom:8vw}.floor_list__item:not(:last-of-type)::after{content:"";position:absolute;width:24rem;height:.2rem;bottom:0;background-color:var(--accent-color);justify-self:center}.floor_list__item:nth-of-type(odd) .floor_list__header{text-align:right;grid-column:2/3;grid-row:1/2}.floor_list__item:nth-of-type(odd) .outlet-list{grid-row:1/2;grid-column:1/2}.floor__header::before{left:-10%;width:10%}.floor__header::after{right:-10%;width:10%}.outlets-container{gap:1.5rem}.outlet-preview{gap:1rem;padding:5rem 4rem;grid-template-columns:1.2fr 1fr;border:1px solid rgba(0,0,0,.2);box-shadow:0 4rem 3rem -2rem rgba(0,0,0,.06)}.outlet-preview:nth-of-type(even){grid-template-columns:1fr 2fr}.outlet-preview:nth-of-type(even) .outlet-preview__info{grid-column:2/3}.outlet-preview:nth-of-type(even) .outlet-preview__number-container{grid-column:1/2;grid-row:1/2}.outlet-preview:nth-of-type(even) .outlet-preview__number::after{left:0}.outlet-preview:nth-of-type(odd) .outlet-preview__number-container{margin-left:auto;text-align:right}.outlet-preview:nth-of-type(odd) .outlet-preview__number::after{right:0}.outlet__title{font-size:2.5rem}#outlet_switcher{padding:1rem 1.5rem}.outlet-label{grid-column:2/3;justify-self:right}.outlet-label__no{justify-content:flex-end}.outlet-hero-section{position:relative;grid-template-columns:1fr auto;gap:1.5rem;margin-top:4rem}.auto-grid-layout{grid-template-columns:auto 1fr}.rooms-layout{grid-template-rows:1fr 1fr}.room-container__header{padding:1.5rem 0}.people-grid{gap:5rem 3rem}#hero_title{font-size:3rem}.feature__title{font-size:1.5rem}.features-grid{grid-template-columns:repeat(auto-fill, minmax(20rem, 1fr))}.graph-container{width:80%;min-height:60vh;justify-self:center}}@media only screen and (min-width: 1280px){#home_page,.page,.page-layout{grid-template-columns:1fr 85vw 1fr}.grid-3{justify-content:center}.grid-3>.grid{width:100%}.rooms-layout{grid-template-columns:repeat(3, 1fr);grid-auto-flow:column}.link-container{grid-template-columns:auto auto}}@media(any-hover: hover){::-webkit-scrollbar{width:.5rem;height:.5rem}::-webkit-scrollbar-thumb{background:rgba(var(--text-color), 0.3);border-radius:1rem}::-webkit-scrollbar-thumb:hover{background:rgba(var(--text-color), 0.5)}.page-link{cursor:pointer;transition:color .3s}.page-link:hover{color:var(--accent-color)}.page-link:hover .icon{fill:var(--accent-color)}.floor__button:hover{background:var(--background-color)}.outlet-list__item .icon{fill:var(--accent-color);opacity:0;transform-origin:left;transform:translateX(-0.5rem);transition:opacity .3s,transform .3s}.outlet-list__item:hover .icon{opacity:1;transform:translateX(0)}.intern__level{transition:transform .3s}.intern__level:hover{transform:scale(1.1)}} \ No newline at end of file diff --git a/assets/css/main.scss b/assets/css/main.scss index b39666d..d4b8fdc 100644 --- a/assets/css/main.scss +++ b/assets/css/main.scss @@ -1,1568 +1,1539 @@ -* :not(ol){ - padding: 0; - margin: 0; - -webkit-box-sizing: border-box; - box-sizing: border-box; - font-family: 'Roboto Slab', serif; +* :not(ol) { + padding: 0; + margin: 0; + box-sizing: border-box; + font-family: "Roboto Slab", serif; } -:root{ - font-size: clamp(1rem, 1.2vmax, 3rem); +:root { + font-size: clamp(1rem, 1.2vmax, 3rem); } body { - --accent-color: #E72C37; - --light-shade: rgba(var(--text-color), 0.06); - --text-color: 17, 17, 17; - --text-color-light: 100, 100, 100; - --foreground-color: 255, 255, 255; - --background-color: #F6f6f6; - --error-color: red; - --green: #007936; - --banner-color: #1E88E5; - --secondary-text-color: #034baa; - --font-weight-factor: 1; - color: rgba(var(--text-color), 1); - height: calc(100%); - background: var(--background-color); + --accent-color: #e72c37; + --light-shade: rgba(var(--text-color), 0.06); + --text-color: 17, 17, 17; + --text-color-light: 100, 100, 100; + --foreground-color: 255, 255, 255; + --background-color: #f6f6f6; + --error-color: red; + --green: #007936; + --banner-color: #1e88e5; + --secondary-text-color: #034baa; + --font-weight-factor: 1; + color: rgba(var(--text-color), 1); + height: calc(100%); + background: var(--background-color); } -body[data-theme='dark']{ - --accent-color: #ff3949; - --green: #13ff5a; - --text-color: 240, 240, 240; - --text-color-light: 170, 170, 170; - --foreground-color: 20, 20, 20; - --background-color: #0a0a0a; - --error-color: rgb(255, 106, 106); - --banner-color: #0166be; - --secondary-text-color: #4393fc; - --font-weight-factor: 0.9; - #outlet_switcher{ - background: linear-gradient(rgba(var(--text-color), 0.06), rgba(var(--text-color), 0.06)), rgba(var(--foreground-color), 1); - } - .outlet-preview{ - box-shadow: 0 4rem 3rem -2rem rgba(0, 0, 0, 0.3); - } +body[data-theme="dark"] { + --accent-color: #ff3949; + --green: #13ff5a; + --text-color: 240, 240, 240; + --text-color-light: 170, 170, 170; + --foreground-color: 20, 20, 20; + --background-color: #0a0a0a; + --error-color: rgb(255, 106, 106); + --banner-color: #0166be; + --secondary-text-color: #4393fc; + --font-weight-factor: 0.9; + #outlet_switcher { + background: linear-gradient( + rgba(var(--text-color), 0.06), + rgba(var(--text-color), 0.06) + ), + rgba(var(--foreground-color), 1); + } + .outlet-preview { + box-shadow: 0 4rem 3rem -2rem rgba(0, 0, 0, 0.3); + } } -.full-bleed{ - grid-column: 1/4; +.full-bleed { + grid-column: 1/4; } -.h1{ - font-size: 2.5rem; +.h1 { + font-size: 2.5rem; } -.h2{ - font-size: 2rem; +.h2 { + font-size: 2rem; } -.h3{ - font-size: 1.4rem; +.h3 { + font-size: 1.4rem; } -.h4{ - font-size: 1rem; +.h4 { + font-size: 1rem; } -.h5{ - font-size: 0.8rem; +.h5 { + font-size: 0.8rem; } -.uppercase{ - text-transform: uppercase; +.uppercase { + text-transform: uppercase; } -.capitalize{ - text-transform: capitalize; +.capitalize { + text-transform: capitalize; } -#my_popup{ - --width: min(24rem, 100%); +#my_popup { + --width: min(24rem, 100%); } p { - font-weight: calc(400 * var(--font-weight-factor)); - max-width: 70ch; - line-height: 1.6; + font-weight: calc(400 * var(--font-weight-factor)); + max-width: 70ch; + line-height: 1.6; } -img{ - object-fit: cover; +img { + object-fit: cover; } -a{ - color: inherit; - text-decoration: none; - &:focus-visible{ - box-shadow: 0 0 0 0.1rem rgba(var(--text-color), 1) inset; - } +a { + color: inherit; + text-decoration: none; + &:focus-visible { + box-shadow: 0 0 0 0.1rem rgba(var(--text-color), 1) inset; + } } -p{ - a{ - color: var(--accent-color); - } +p { + a { + color: var(--accent-color); + } } -button{ - position: relative; - overflow: hidden; - display: inline-flex; - align-items: center; - border: none; - background: none; - cursor: pointer; - outline: none; - color: inherit; - font-weight: calc(500 * var(--font-weight-factor)); - -webkit-tap-highlight-color: transparent; +button { + position: relative; + overflow: hidden; + display: inline-flex; + align-items: center; + border: none; + background: none; + cursor: pointer; + outline: none; + color: inherit; + font-weight: calc(500 * var(--font-weight-factor)); + -webkit-tap-highlight-color: transparent; } -.button{ - border-radius: 0.2rem; - padding: 0.5rem 0.6rem; - &--primary{ - background: var(--accent-color); - color: rgba(var(--foreground-color), 1); - .icon{ - fill: rgba(var(--foreground-color), 1); - } - } - &--outlined{ - box-shadow: 0 0 0 1px rgba(var(--text-color), 0.5); - } - &--filled{ - background-color: rgba(var(--text-color), 0.2); +.button { + border-radius: 0.2rem; + padding: 0.5rem 0.6rem; + &--primary { + background: var(--accent-color); + color: rgba(var(--foreground-color), 1); + .icon { + fill: rgba(var(--foreground-color), 1); } + } + &--outlined { + box-shadow: 0 0 0 1px rgba(var(--text-color), 0.5); + } + &--filled { + background-color: rgba(var(--text-color), 0.2); + } } -button:focus-visible{ - outline: rgba(var(--text-color), 1) 0.1rem solid; +button:focus-visible { + outline: rgba(var(--text-color), 1) 0.1rem solid; } sm-input, -sm-textarea{ - --border-radius: 0.2rem; - --background: rgba(var(--text-color), 0.06); +sm-textarea { + --border-radius: 0.2rem; + --background: rgba(var(--text-color), 0.06); } -sm-button{ - --border-radius: 0.2rem; +sm-button { + --border-radius: 0.2rem; } -sm-tab-header{ - align-self: flex-start; +sm-tab-header { + align-self: flex-start; } -ul{ - list-style: none; +ul { + list-style: none; } -ol[type="1"]{ - display: grid; - gap: 2rem; +ol[type="1"] { + display: grid; + gap: 2rem; } -.accent-color{ - color: var(--accent-color); +.accent-color { + color: var(--accent-color); } -.flex{ - display: flex; +.flex { + display: flex; } -.grid{ - display: grid; +.flex-wrap { + flex-wrap: wrap; } -.grid-3{ - grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr)); +.grid { + display: grid; } -.flow-column{ - grid-auto-flow: column; +.grid-3 { + grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr)); } -.gap-0-5{ - gap: 0.5rem; +.flow-column { + grid-auto-flow: column; } -.gap-1{ - gap: 1rem; +.gap-0-5 { + gap: 0.5rem; } -.gap-1-5{ - gap: 1.5rem; +.gap-1 { + gap: 1rem; } -.gap-2{ - gap: 2rem; +.gap-1-5 { + gap: 1.5rem; } -.gap-3{ - gap: 3rem; +.gap-2 { + gap: 2rem; } -.pos-relative{ - position: relative; +.gap-3 { + gap: 3rem; } -.text-align-right{ - text-align: right; +.pos-relative { + position: relative; } -.align-start{ - align-items: flex-start; +.text-align-right { + text-align: right; } -.align-center{ - align-items: center; +.align-start { + align-items: flex-start; } -.text-center{ - text-align: center; +.align-center { + align-items: center; } -.justify-start{ - justify-content: start; +.text-center { + text-align: center; } -.justify-center{ - justify-content: center; +.justify-start { + justify-content: start; } -.justify-right{ - margin-left: auto; +.justify-center { + justify-content: center; } -.align-self-center{ - align-self: center; +.justify-right { + margin-left: auto; } -.justify-self-center{ - justify-self: center; +.align-self-center { + align-self: center; } -.justify-self-start{ - justify-self: start; +.justify-self-center { + justify-self: center; } -.direction-column{ - flex-direction: column; +.justify-self-start { + justify-self: start; } -.space-between{ - justify-content: space-between; +.direction-column { + flex-direction: column; } -.w-100{ - width: 100%; +.space-between { + justify-content: space-between; } -.margin-top-1-5{ - margin-top: 1.5rem; +.w-100 { + width: 100%; } -.margin-bottom-0-5r{ - margin-bottom: 0.5rem; +.margin-top-1-5 { + margin-top: 1.5rem; } -.margin-bottom-1r{ - margin-bottom: 1rem; +.margin-bottom-0-5r { + margin-bottom: 0.5rem; } -.margin-bottom-1-5r{ - margin-bottom: 1.5rem; +.margin-bottom-1r { + margin-bottom: 1rem; } -.margin-bottom-2r{ - margin-bottom: 2rem; +.margin-bottom-1-5r { + margin-bottom: 1.5rem; } -.margin-bottom-3r{ - margin-bottom: 3rem; +.margin-bottom-2r { + margin-bottom: 2rem; } -.margin-bottom-4r{ - margin-bottom: 4rem; +.margin-bottom-3r { + margin-bottom: 3rem; } -.margin-left-0-5{ - margin-left: 0.5rem; +.margin-bottom-4r { + margin-bottom: 4rem; } -.margin-right-0-5{ +.margin-left-0-5 { + margin-left: 0.5rem; +} +.margin-right-0-5 { + margin-right: 0.5rem; +} +.hide { + opacity: 0; + pointer-events: none; +} +.hide-completely { + display: none !important; +} +.no-transformations { + transform: none !important; +} +.overflow-ellipsis { + width: 100%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.ripple { + position: absolute; + border-radius: 50%; + transform: scale(0); + background: rgba(var(--text-color), 0.16); + pointer-events: none; +} +.interact { + position: relative; + overflow: hidden; + cursor: pointer; + -webkit-tap-highlight-color: transparent; +} +.breakable { + overflow-wrap: break-word; + word-wrap: break-word; + -ms-word-break: break-all; + word-break: break-word; + -ms-hyphens: auto; + -moz-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} +.observe-empty-state:empty { + display: none; +} +.observe-empty-state:not(:empty) ~ .empty-state { + display: none; +} +.icon { + width: 1.2rem; + height: 1.2rem; + fill: rgba(var(--text-color), 0.9); +} +.icon-only { + height: 2.6rem; + width: 2.6rem; + padding: 0.6rem; +} +.close-icon { + padding: 0.3rem; +} +.close-button { + left: -0.5rem; +} + +.button__label { + font-size: 1rem; +} +.button__icon { + height: 1.1rem; + width: 1.1rem; + &--left { margin-right: 0.5rem; -} -.hide{ - opacity: 0; - pointer-events: none; -} -.hide-completely{ - display: none !important; -} -.no-transformations{ - transform: none !important; -} -.overflow-ellipsis{ - width: 100%; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} -.ripple{ - position: absolute; - border-radius: 50%; - transform: scale(0); - background: rgba(var(--text-color), 0.16); - pointer-events: none; -} -.interact{ - position: relative; - overflow: hidden; - cursor: pointer; - -webkit-tap-highlight-color: transparent; -} -.breakable{ - overflow-wrap: break-word; - word-wrap: break-word; - -ms-word-break: break-all; - word-break: break-word; - -ms-hyphens: auto; - -moz-hyphens: auto; - -webkit-hyphens: auto; - hyphens: auto; -} -.observe-empty-state:empty{ - display: none; -} -.observe-empty-state:not(:empty) ~ .empty-state{ - display: none; -} -.icon{ - width: 1.5rem; - height: 1.5rem; - fill: rgba(var(--text-color), 0.9); -} -.icon-only{ - height: 2.6rem; - width: 2.6rem; - padding: 0.6rem; -} -.close-icon{ - padding: 0.3rem; -} -.close-button{ - left: -0.5rem; + } + &--right { + margin-left: 0.5rem; + } } -.button__label{ - font-size: 1rem; +.color-0-9 { + color: rgba(var(--text-color), 0.9); } -.button__icon{ - height: 1.1rem; - width: 1.1rem; - &--left{ - margin-right: 0.5rem; - } - &--right{ - margin-left: 0.5rem; - } +.color-0-8 { + color: rgba(var(--text-color), 0.8); +} +.color-0-7 { + color: rgba(var(--text-color), 0.7); +} +.color-0-3 { + color: rgba(var(--text-color), 0.3); } -.color-0-9{ - color: rgba(var(--text-color), 0.9); +.weight-400 { + font-weight: calc(400 * var(--font-weight-factor)); } -.color-0-8{ - color: rgba(var(--text-color), 0.8); +.weight-500 { + font-weight: calc(500 * var(--font-weight-factor)); } -.color-0-7{ +.weight-700 { + font-weight: calc(700 * var(--font-weight-factor)); +} +.weight-900 { + font-weight: calc(900 * var(--font-weight-factor)); +} + +.popup__header { + padding: 0.5rem 1.5rem 0 1rem; + display: grid; + grid-template-columns: auto 1fr; + gap: 0.5rem; + align-items: center; + width: 100%; +} +.popup__header__close { + padding: 0.5rem; + cursor: pointer; +} + +.banner { + display: grid; + gap: 1rem; + padding: 0.5rem 0 0.5rem 1rem; + align-items: center; + border: 0.1rem solid var(--banner-color); + grid-template-columns: 1fr auto; + border-radius: 0.5rem; + margin: 0 1rem; + .close-icon { + width: 2.2rem; + height: 2.2rem; color: rgba(var(--text-color), 0.7); + } } -.color-0-3{ - color: rgba(var(--text-color), 0.3); +.banner__text { + max-width: unset; + font-size: 0.9rem; } -.weight-400{ - font-weight: calc(400 * var(--font-weight-factor)); +#elevator_popup { + position: fixed; + width: 100%; + height: 100%; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 15; + grid-template-rows: auto 1fr; + background: rgba(var(--foreground-color), 1); } -.weight-500{ - font-weight: calc(500 * var(--font-weight-factor)); +.elevator__header { + position: sticky; + top: 0; + padding: 1.2rem 1.5rem; + display: grid; + grid-template-columns: auto 1fr; + gap: 0.5rem; + align-items: center; + justify-content: flex-start; + width: 100%; + background: rgba(var(--foreground-color), 1); + z-index: 1; } -.weight-700{ - font-weight: calc(700 * var(--font-weight-factor)); +#floor_list { + align-content: flex-start; + padding: 0 1.5rem 4rem 1.5rem; + gap: 2rem; + overflow-y: auto; + transform-origin: top; } -.weight-900{ - font-weight: calc(900 * var(--font-weight-factor)); +.floor_list__item { + display: grid; + gap: 1.5rem; + transform-origin: top; + &:last-of-type { + padding-bottom: 25vh; + } +} +.floor_list__header { + position: sticky; + top: 0; + padding-bottom: 0.5rem; + background: rgba(var(--foreground-color), 1); + z-index: 1; + text-transform: capitalize; } -.popup__header{ - padding: 0.5rem 1.5rem 0 1rem; - display: grid; - grid-template-columns: auto 1fr; - gap: 0.5rem; - align-items: center; - width: 100%; +.outlet-list { + gap: 2rem; + counter-reset: outlet-counter; } -.popup__header__close{ - padding: 0.5rem; - cursor: pointer; -} - -.banner{ - display: grid; - gap: 1rem; - padding: 0.5rem 0 0.5rem 1rem; - align-items: center; - border: 0.1rem solid var(--banner-color); - grid-template-columns: 1fr auto; - border-radius: 0.5rem; - margin: 0 1rem; - .close-icon{ - width: 2.2rem; - height: 2.2rem; - color: rgba(var(--text-color), 0.7); - } -} -.banner__text{ - max-width: unset; - font-size: 0.9rem; -} - -#elevator_popup{ - position: absolute; - width: 100%; - height: 100%; - top: 0; - left: 0; - right: 0; - bottom: 0; - z-index: 15; - grid-template-rows: auto 1fr; - background: rgba(var(--foreground-color), 1); -} -.elevator__header{ - position: sticky; - top: 0; - padding: 1.2rem 1.5rem; - display: grid; - grid-template-columns: auto 1fr; - gap: 0.5rem; - align-items: center; - justify-content: flex-start; - width: 100%; - background: rgba(var(--foreground-color), 1); - z-index: 1; - -} -#floor_list{ - align-content: flex-start; - padding: 0 1.5rem 4rem 1.5rem; - gap: 2rem; - overflow-y: auto; - transform-origin: top; -} -.floor_list__item{ - display: grid; - gap: 1.5rem; - transform-origin: top; - &:last-of-type{ - padding-bottom: 25vh; - } -} -.floor_list__header{ - position: sticky; - top: 0; - padding-bottom: 0.5rem; - background: rgba(var(--foreground-color), 1); - z-index: 1; - text-transform: capitalize; -} - -.outlet-list{ - gap: 2rem; - counter-reset: outlet-counter; -} -.floor-list__outlet{ - display: flex; - align-items: center; - &::before{ - content: ''; - width: 0.4rem; - height: 1.5rem; - margin-right: 0.5rem; - background-color: var(--accent-color); - } -} -.outlet-list__item{ - display: grid; - user-select: none; - width: min(50ch, 100%); - counter-increment: outlet-counter; - .outlet-title::before{ - content: counter(outlet-counter)". "; - } - .icon{ - fill: var(--accent-color); - flex-shrink: 0; - } -} -.outlet-title{ - font-size: 1.2rem; - font-weight: calc(700 * var(--font-weight-factor)); - margin-bottom: 0.5rem; -} -.outlet-brief{ - color: rgba(var(--text-color), 0.8); -} - -.popup__header__close{ - padding: 0.5rem; - cursor: pointer; -} - - -.floor__button{ - padding: 0.5rem 0; - flex-direction: column; - text-align: left; - align-items: flex-start; - border-radius: 0.2rem; - font-size: 1.5rem; - font-weight: calc(900 * var(--font-weight-factor)); - background: rgba(var(--foreground-color), 1); - &--active{ - background: rgba(var(--text-color), 0.2); - box-shadow: 0 0 0 0.4rem rgba(var(--text-color), 1) inset; - } -} -.floor-name{ - margin-top: 0.2rem; - font-size: 0.8rem; -} - -.elevator__floor-line{ - flex: 1; - height: 0.1rem; - margin-left: 2rem; - background-color: var(--accent-color); -} - - -#main_header{ - position: relative; - padding: 1rem; - grid-template-columns: repeat(3, 1fr); -} -#elevator_button{ - justify-self: flex-start; - margin-left: -1rem; - .icon{ - width: 1.7rem; - height: 1.7rem; - } -} -#main_header__logo{ - height: 1.8rem; - width: 1.8rem; -} -.theme-switcher{ - position: relative; - justify-self: flex-end; - width: 1.5rem; +.floor-list__outlet { + display: flex; + align-items: center; + &::before { + content: ""; + width: 0.4rem; height: 1.5rem; - cursor: pointer; - -webkit-tap-highlight-color: transparent; - .icon{ - position: absolute; - transition: transform 0.6s; - } + margin-right: 0.5rem; + background-color: var(--accent-color); + } } -.theme-switcher__checkbox{ - display: none; - &:checked ~ .moon-icon{ - transform: scale(0) rotate(90deg); - } - &:not(:checked) ~ .sun-icon{ - transform: scale(0) rotate(-90deg); - } +.outlet-list__item { + display: grid; + user-select: none; + width: min(50ch, 100%); + counter-increment: outlet-counter; + .outlet-title::before { + content: counter(outlet-counter) ". "; + } + .icon { + fill: var(--accent-color); + flex-shrink: 0; + } +} +.outlet-title { + font-size: 1.2rem; + font-weight: calc(700 * var(--font-weight-factor)); + margin-bottom: 0.5rem; +} +.outlet-brief { + color: rgba(var(--text-color), 0.8); +} + +.popup__header__close { + padding: 0.5rem; + cursor: pointer; +} + +.floor__button { + padding: 0.5rem 0; + flex-direction: column; + text-align: left; + align-items: flex-start; + border-radius: 0.2rem; + font-size: 1.5rem; + font-weight: calc(900 * var(--font-weight-factor)); + background: rgba(var(--foreground-color), 1); + &--active { + background: rgba(var(--text-color), 0.2); + box-shadow: 0 0 0 0.4rem rgba(var(--text-color), 1) inset; + } +} +.floor-name { + margin-top: 0.2rem; + font-size: 0.8rem; +} + +.elevator__floor-line { + flex: 1; + height: 0.1rem; + margin-left: 2rem; + background-color: var(--accent-color); +} + +#main_header { + position: sticky; + top: 0; + z-index: 1; + background: var(--background-color); + display: flex; + align-items: center; + justify-content: space-between; + padding: 1rem; +} +#elevator_button { + justify-self: flex-start; + margin-left: -1rem; +} +.main-logo { + position: absolute; + left: 50%; + transform: translateX(-50%); +} +#main_header__logo { + height: 1.5rem; + width: 1.5rem; } .page, -.page-layout{ - position: relative; - display: grid; - grid-template-columns: 1rem 1fr 1rem; - & > * { - grid-column: 2/3; - } +.page-layout { + position: relative; + display: grid; + grid-template-columns: 1rem 1fr 1rem; + & > * { + grid-column: 2/3; + } } -.page{ - padding-bottom: 4rem; +.page { + padding-bottom: 4rem; } -.tag{ - background: var(--accent-color); - padding: 0.4rem 0.6rem; +.tag { + background: var(--accent-color); + padding: 0.4rem 0.6rem; } -#home_page{ - will-change: scroll-position; - overflow-y: auto; - max-height: calc(100vh - 5.2rem); - grid-template-columns: 2rem 1fr; - scroll-behavior: smooth; +#home_page { + will-change: scroll-position; + scroll-behavior: smooth; } -#floor_line_map{ - position: sticky; - top: 1rem; - height: 40vh; - z-index: 10; - grid-template-columns: 2rem 1fr; - grid-column: 1/2; +#floor_line_map { + position: sticky; + top: 1rem; + height: 40vh; + z-index: 10; + grid-template-columns: 2rem 1fr; + grid-column: 1/2; } -.line-map{ - height: 100%; +.line-map { + height: 100%; } -.line-map__circle{ +.line-map__circle { + position: absolute; + border-radius: 1rem; + width: 1rem; + height: 1rem; + margin-top: -0.7rem; + background: rgba(var(--foreground-color), 1); + border: solid 0.2rem var(--accent-color); + transition: transform 0.1s linear; + z-index: 5; +} +.line-map__bar { + position: relative; + width: 0.1rem; + height: 100%; + border-radius: 1rem; + background: var(--accent-color); + &::after { position: absolute; - border-radius: 1rem; - width: 1rem; - height: 1rem; - margin-top: -0.7rem; - background: rgba(var(--foreground-color), 1); - border: solid 0.2rem var(--accent-color); - transition: transform 0.1s linear; - z-index: 5; -} -.line-map__bar{ - position: relative; - width: 0.1rem; - height: 100%; - border-radius: 1rem; - background: var(--accent-color); - &::after{ - position: absolute; - content: ''; - bottom: 0; - left: 50%; - transform: translateX(-50%); - width: 0.7rem; - height: 0.2rem; - background-color: var(--accent-color); - } + content: ""; + bottom: 0; + left: 50%; + transform: translateX(-50%); + width: 0.7rem; + height: 0.2rem; + background-color: var(--accent-color); + } } -.floor-label{ +.floor-label { + position: absolute; + display: flex; + align-items: center; + left: 0.2rem; + margin-top: -1rem; + user-select: none; + transition: transform 0.3s; +} +.floor-circle { + position: relative; + border-radius: 1rem; + padding: 0.8rem; + &::after { + content: ""; position: absolute; - display: flex; - align-items: center; - left: 0.2rem; - margin-top: -1rem; - user-select: none; - transition: transform 0.3s; -} -.floor-circle{ - position: relative; - border-radius: 1rem; - padding: 0.8rem; - &::after{ - content: ''; - position: absolute; - padding: 0.3rem; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - background: rgba(var(--text-color), 1); - border-radius: 1rem; - } -} -.floor-title{ - opacity: 0.5; - font-size: 0.9rem; - white-space: nowrap; - padding: 0.4rem 0.6rem; - margin-left: 1rem; - border-radius: 0.2rem; - background: rgba(var(--foreground-color), 1); - transition: box-shadow 0.3s, opacity 0.3s; -} - -#floor_container{ - width: calc(100% - 1rem); -} - -.floor{ - padding-bottom: 3rem; - width: 100%; -} - -.floor__header{ - position: relative; - padding: 0.5rem 0; - transform: translateY(-0.1rem); - background: var(--background-color); -} - -.floor__num{ - display: flex; - align-items: center; - font-size: 1.8rem; - font-weight: calc(900 * var(--font-weight-factor)); - color: rgba(var(--text-color), 0.3); -} - -.floor__title{ - font-size: 1.3rem; - font-weight: calc(700 * var(--font-weight-factor)); -} - -.big-icon{ - height: 2rem; - width: 2rem; -} - -.outlets-container{ - margin: 1rem 0; - gap: 1.5rem; -} - -.outlet-preview{ - position: relative; - display: grid; - padding: 1rem; - align-items: center; - border-radius: 0.7rem; - background-color: rgba(var(--foreground-color), 1); -} -.outlet__title{ - line-height: 1.2; - max-width: 18ch; - font-size: 1.8rem; - margin-bottom: 1rem; - text-transform: capitalize; - font-weight: calc(900 * var(--font-weight-factor)); -} -.svg-outlet-title{ - height: 4rem; - margin-bottom: 1.5rem; - fill: rgba(var(--text-color), 1); - font-weight: calc(900 * var(--font-weight-factor)); -} -.outlet__description{ - color: rgba(var(--text-color), 0.8); -} -.outlet-preview__button{ - padding: 0.5rem 0; - justify-self: flex-start; - color: var(--accent-color); - font-weight: calc(700 * var(--font-weight-factor)); -} - -.outlet-preview__number{ - position: relative; - line-height: 1; - font-size: 8rem; - font-weight: 900; - -webkit-text-stroke: 1rem var(--accent-color); - -webkit-text-fill-color: rgba(var(--foreground-color), 1); - margin: 0 0.5rem; - &::after{ - content: attr(data-number); - position: absolute; - line-height: 1; - font-size: 1em; - font-weight: inherit; - -webkit-text-stroke: 0; - color: rgba(var(--foreground-color), 1); - } -} - -.label{ - position: relative; - font-size: 0.8rem; - margin-bottom: 0.3rem; -} -.value{ - font-size: 1.2rem; -} - -.series-container{ - gap: 1.5rem; - padding-bottom: 1.5rem; - grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr)); -} - -.bit-bond-series__row, -.bob-fund__row, -.person-card{ - min-width: 100%; -} - -.bob-fund__row{ - .grid{ - align-content: flex-start; - } -} - -.bob-fund__row, -.bit-bond-series__row, -.card{ - gap: 1rem; - padding: 1.5rem; - border-radius: 0.5rem; - align-items: flex-start; - background-color: rgba(var(--foreground-color), 1); - box-shadow: 0 0.5rem 1rem -0.5rem rgba(0, 0, 0, 0.1); -} - -.bit-bond-series__row{ - .original-value{ - font-size: 0.85rem; - } -} - -.up-arrow{ - height: 1em; - width: 1em; - fill: var(--green); - margin-right: 0.1em; -} -.percent-gain{ - margin-right: 0.5em; - font-weight: calc(500 * var(--font-weight-factor)); -} -.percent-gain, -.time-elapsed{ - font-size: 0.8rem; -} -.time-elapsed{ - color: rgba(var(--text-color), 0.8); -} - - -.person-card{ - position: relative; - gap: 1rem; - text-align: center; - justify-items: center; - align-content: flex-start; - grid-template-columns: 1fr; -} -.person__image{ - width: 100%; - height: auto; - border-radius: 0.5rem; - height: 10rem; - width: 10rem; - object-position: top; - border-radius: 50%; -} -.person__name{ - font-size: 0.9rem; - text-transform: capitalize; -} -.investor__bio{ - font-size: 0.85rem; - margin-top: 0.5rem; -} -.investor__contribution{ - font-size: 0.85rem; -} -.intern-flo-id{ - margin-top: 0.3rem; - font-size: 0.75rem; -} -.intern__project{ - margin-top: 0.5rem; -} -.intern__level{ - position: absolute; - cursor: pointer; - font-size: 0.8rem; - border-radius: 0.2rem; - margin-bottom: 0.3rem; - padding: 0.3rem 0.5rem; - justify-self: flex-end; - font-weight: calc(500 * var(--font-weight-factor)); - box-shadow: 0 0.1rem 0.2rem rgba(0, 0, 0, 0.2); -} -.starter{ - background-color: rgba(var(--foreground-color), 1); -} -.motivated{ - color: black; - background-color: #FFCA28; -} -.passionate{ - color: black; - background-color: #00E676; -} -#intern_level_popup{ - --width: min(48rem, 100%); -} -.table{ - display: grid; - gap: 1rem; - grid-template-columns: 6rem 1fr; - p{ - font-size: 0.9rem; - color: rgba(var(--text-color), 0.9); - } -} - -.outlet-hero-section{ - display: grid; -} - -#outlet_switcher{ - position: absolute; - top: 0; - padding: 1rem; - border-radius: 0.3rem; - background: rgba(var(--foreground-color), 1); - box-shadow: 0 2rem 4rem -1rem rgba(0, 0, 0, 0.2); - z-index: 2; - outline: none; -} -.outlet_switcher__floor{ - display: flex; - flex-direction: column; - overflow-y: auto; -} -.outlet_switcher__button{ - display: flex; - align-items: center; - font-size: 1rem; - padding: 0.6rem 0; - font-weight: calc(500 * var(--font-weight-factor)); - &--active{ - color: var(--accent-color) !important; - } -} -.outlet-label{ - display: grid; - gap: 0.5rem; - text-align: left; - align-items: center; - min-width: 8rem; - font-size: 1.1rem; - margin-bottom: 0.5rem; - align-self: flex-start; - grid-template-areas: 'label icon' 'num num'; - .icon{ - grid-area: icon; - height: 1.6rem; - width: 1.6rem; - fill: var(--accent-color); - justify-self: flex-end; - } -} -.outlet-label__name{ - font-size: 1.7rem; - color: rgba(var(--text-color), 0.5); - font-weight: calc(900 * var(--font-weight-factor)); -} -.outlet-label__no{ - grid-area: num; - display: flex; - position: relative; - line-height: 1; - font-size: 8rem; - font-weight: 900; - -webkit-text-stroke: 1rem var(--accent-color); - -webkit-text-fill-color: var(--background-color); - margin: 0 0.5rem; - &::after{ - content: attr(data-number); - position: absolute; - line-height: 1; - font-size: 1em; - font-weight: inherit; - -webkit-text-stroke: 0; - color: var(--background-color); - } -} -.auto-grid-layout{ - justify-content: flex-start; - overflow-x: auto; -} -.grid-2{ - grid-template-columns: auto 1fr; -} - -.rooms__header{ - z-index: 1; - display: flex; - align-items: center; - margin-bottom: 1.5rem; - background: var(--background-color); - box-shadow: 0 1rem 1rem -1rem rgba(0, 0, 0, 0.2); -} -.room__label{ - position: relative; - display: flex; - align-items: center; - font-weight: calc(700 * var(--font-weight-factor)); - padding-right: 1.5rem; - font-size: 1.5rem; -} -.room-button{ - position: relative; - opacity: 0.6; - flex-shrink: 0; - border-radius: 0; - font-weight: calc(500 * var(--font-weight-factor)); - font-size: 1.1rem; - transition: opacity 0.3s, background-color 0.3s; - padding: 0.6rem 0.8rem; - &:not(:last-of-type)::after{ - content: ''; - height: 0.1rem; - width: 4rem; - margin-left: 1rem; - align-self: center; - background: var(--accent-color); - } - &[active]{ - opacity: 1; - color: var(--accent-color); - .icon{ - fill: var(--accent-color); - } - } - -} - -.people-grid{ - display: grid; - gap: 3rem 1.5rem; - grid-template-columns: repeat(auto-fill, minmax(13rem, 1fr)); -} - -.rooms-layout{ - position: relative; - display: grid; - gap: 1rem; - grid-template-columns: 1fr 1fr; - margin-bottom: 4rem; -} -.room-tile{ - display: flex; - position: relative; - border-radius: 0.5rem; - transition: transform 0.3s; - background-color: rgba(var(--foreground-color), 1); - box-shadow: 0 1rem 3rem -1rem rgba(0, 0, 0, 0.1); - -webkit-tap-highlight-color: transparent; - &--main{ - padding-top: 100%; - grid-row: span 2; - .tile-content{ - position: absolute; - bottom: 0; - } - } - .tile-content{ - display: flex; - width: 100%; - height: 100%; - padding: 1.5rem; - align-self: flex-end; - flex-direction: column; - } - &:active{ - transform: scale(0.95); - } -} -.room-tile__icon{ - position: absolute; - height: 6rem; - width: 6rem; + padding: 0.3rem; top: 50%; left: 50%; transform: translate(-50%, -50%); - // margin-bottom: 1rem; - &:not(.room-tile__icon--colored){ - fill: rgba(var(--text-color), 0.1); - } + background: rgba(var(--text-color), 1); + border-radius: 1rem; + } } -.investors-icon{ - height: 8rem; - width: 8rem; -} -.room-tile__title{ - // font-size: 1.2rem; - // border-bottom: 1px solid; - font-size: 0.9rem; - padding: 0.4rem 0.8rem; - border: solid 0.1rem var(--secondary-text-color); - color: var(--secondary-text-color); - border-radius: 0.3rem; - // align-self: flex-start; -} -#performance_preview{ - margin-top: auto; - & > *{ - padding: 0; - box-shadow: none; - } -} -#expanding_tile{ - position: fixed; - border-radius: 0.5rem; - background-color: rgba(var(--foreground-color), 1); - z-index: 5; +.floor-title { + opacity: 0.5; + font-size: 0.9rem; + white-space: nowrap; + padding: 0.4rem 0.6rem; + margin-left: 1rem; + border-radius: 0.2rem; + background: rgba(var(--foreground-color), 1); + transition: box-shadow 0.3s, opacity 0.3s; } -.room-container{ - position: fixed; - top: 0; - bottom: 0; - left: 0; - right: 0; - z-index: 6; - overflow-y: auto; - background-color: var(--background-color); - grid-template-rows: auto auto 1fr auto; - align-items: flex-start; -} -.room{ - padding-bottom: 4rem; +.floor { + padding-bottom: 3rem; + width: 100%; } -.room-container__header{ - display: flex; - position: sticky; - top: 0; - z-index: 2; - background-color: inherit; - padding: 1rem 0; - &::before{ - position: absolute; - content: ''; - width: 1rem; - height: 100%; - left: -1rem; - top: 0; - background-color: inherit; - } -} -#hero_title{ - font-size: 2rem; - margin-bottom: 2rem; - font-weight: calc(700 * var(--font-weight-factor)); +.floor__header { + position: relative; + padding: 0.5rem 0; + transform: translateY(-0.1rem); + background: var(--background-color); } -/* .room-carousel{ - display: flex; - overflow-x: auto; - scroll-snap-type: x mandatory; - height: 100%; - scroll-behavior: smooth; - & > *{ - min-width: 100%; - scroll-snap-align: start; - - } -} */ - -.room-container__footer{ - position: sticky; - display: flex; - gap: 1rem; - bottom: 0; - z-index: 2; - overflow-x: auto; - align-items: center; - padding: 2rem 0.5rem 0.5rem 3rem; - margin-left: -3rem; - background: linear-gradient(0deg, var(--background-color) 70%, rgba(0,0,0,0) 100%); -} -#room_switcher{ - display: grid; - gap: 0.5rem; - grid-auto-flow: column; - justify-content: flex-start; +.floor__num { + display: flex; + align-items: center; + font-size: 1.8rem; + font-weight: calc(900 * var(--font-weight-factor)); + color: rgba(var(--text-color), 0.3); } -.room-shortcut{ - .room-tile__title{ - font-weight: 500; - font-size: 0.9rem; - } +.floor__title { + font-size: 1.3rem; + font-weight: calc(700 * var(--font-weight-factor)); } -.ext-link-tile{ - position: relative; - display: flex; - padding: 1.5rem; - border-radius: 0.5rem; - background-size: contain; - align-items: center; - justify-content: space-between; - border : solid 0.1rem var(--banner-color); - box-shadow: 0 1rem 3rem -1rem rgba(0, 0, 0, 0.2); - -webkit-tap-highlight-color: transparent; - overflow: hidden; +.big-icon { + height: 2rem; + width: 2rem; } -.tile__title{ - font-size: 1.25rem; + +.outlets-container { + margin: 1rem 0; + gap: 1.5rem; +} + +.outlet-preview { + position: relative; + display: grid; + padding: 1rem; + align-items: center; + border-radius: 0.7rem; + background-color: rgba(var(--foreground-color), 1); +} +.outlet__title { + line-height: 1.2; + max-width: 18ch; + font-size: 1.8rem; + margin-bottom: 1rem; + text-transform: capitalize; + font-weight: calc(900 * var(--font-weight-factor)); +} +.svg-outlet-title { + height: 4rem; + margin-bottom: 1.5rem; + fill: rgba(var(--text-color), 1); + font-weight: calc(900 * var(--font-weight-factor)); +} +.outlet__description { + color: rgba(var(--text-color), 0.8); +} +.outlet-preview__button { + padding: 0.5rem 0; + justify-self: flex-start; + color: var(--accent-color); + font-weight: calc(700 * var(--font-weight-factor)); +} + +.outlet-preview__number { + position: relative; + line-height: 1; + font-size: 8rem; + font-weight: 900; + -webkit-text-stroke: 1rem var(--accent-color); + -webkit-text-fill-color: rgba(var(--foreground-color), 1); + margin: 0 0.5rem; + &::after { + content: attr(data-number); + position: absolute; line-height: 1; - font-weight: calc(500 * var(--font-weight-factor)); - z-index: 1; -} -.tile__brief{ - margin-top: 1rem; - z-index: 1; - color: rgba(var(--text-color), 0.7); -} -.round{ - display: inline-flex; - flex-shrink: 0; - padding: 0.4rem 1rem; - border-radius: 0.3rem; - color: white; - background-color: var(--banner-color); - font-weight: 700 !important; - font-size: 1rem; - z-index: 1; + font-size: 1em; + font-weight: inherit; + -webkit-text-stroke: 0; + color: rgba(var(--foreground-color), 1); + } } -.timeline-container{ - display: grid; - padding: 3rem 0; - gap: 4rem; +.label { + position: relative; + font-size: 0.8rem; + margin-bottom: 0.3rem; } -.timeline-item{ - position: relative; - display: grid; - padding-left: 1rem; - &:not(:last-of-type):before{ - content: ''; - position: absolute; - width: 0.1rem; - height: calc(100% + 4rem); - top: 0; - left: 0; - background-color: rgba(var(--text-color), 0.7); - } - &:after{ - content: ''; - position: absolute; - height: 0.6rem; - width: 0.6rem; - border-radius: 50%; - top: 0; - left: -0.25rem; - background-color: rgba(var(--text-color), 1); - } -} -.timeline-item__header{ - display: flex; - font-size: 0.8rem; - padding: 0.5rem 0.8rem; - border-radius: 0.2rem; - justify-self: flex-start; - transform: translateY(-0.8rem); - box-shadow: 0 0 0 1px rgba(var(--text-color), 0.6); - background-color: rgba(var(--foreground-color), 1); - +.value { + font-size: 1.2rem; } -.features-grid{ - display: grid; - gap: 3rem 2rem; - margin-bottom: 5rem; +.series-container { + gap: 1.5rem; + padding-bottom: 1.5rem; + grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr)); } -.feature{ + +.bit-bond-series__row, +.bob-fund__row, +.person-card { + min-width: 100%; +} + +.bob-fund__row { + .grid { + align-content: flex-start; + } +} + +.bob-fund__row, +.bit-bond-series__row, +.card { + gap: 1rem; + padding: 1.5rem; + border-radius: 0.5rem; + align-items: flex-start; + background-color: rgba(var(--foreground-color), 1); + box-shadow: 0 0.5rem 1rem -0.5rem rgba(0, 0, 0, 0.1); +} + +.bit-bond-series__row { + .original-value { + font-size: 0.85rem; + } +} + +.up-arrow { + height: 1em; + width: 1em; + fill: var(--green); + margin-right: 0.1em; +} +.percent-gain { + margin-right: 0.5em; + font-weight: calc(500 * var(--font-weight-factor)); +} +.percent-gain, +.time-elapsed { + font-size: 0.8rem; +} +.time-elapsed { + color: rgba(var(--text-color), 0.8); +} + +.person-card { + position: relative; + gap: 1rem; + text-align: center; + justify-items: center; + align-content: flex-start; + grid-template-columns: 1fr; +} +.person__image { + width: 100%; + height: auto; + border-radius: 0.5rem; + height: 10rem; + width: 10rem; + object-position: top; + border-radius: 50%; +} +.person__name { + font-size: 0.9rem; + text-transform: capitalize; +} +.investor__bio { + font-size: 0.85rem; + margin-top: 0.5rem; +} +.investor__contribution { + font-size: 0.85rem; +} +.intern-flo-id { + margin-top: 0.3rem; + font-size: 0.75rem; +} +.intern__project { + margin-top: 0.5rem; +} +.intern__level { + position: absolute; + cursor: pointer; + font-size: 0.8rem; + border-radius: 0.2rem; + margin-bottom: 0.3rem; + padding: 0.3rem 0.5rem; + justify-self: flex-end; + font-weight: calc(500 * var(--font-weight-factor)); + box-shadow: 0 0.1rem 0.2rem rgba(0, 0, 0, 0.2); +} +.starter { + background-color: rgba(var(--foreground-color), 1); +} +.motivated { + color: black; + background-color: #ffca28; +} +.passionate { + color: black; + background-color: #00e676; +} +#intern_level_popup { + --width: min(48rem, 100%); +} +.table { + display: grid; + gap: 1rem; + grid-template-columns: 6rem 1fr; + p { + font-size: 0.9rem; + color: rgba(var(--text-color), 0.9); + } +} + +.outlet-hero-section { + display: grid; +} + +#outlet_switcher { + position: absolute; + top: 0; + padding: 1rem; + border-radius: 0.3rem; + background: rgba(var(--foreground-color), 1); + box-shadow: 0 2rem 4rem -1rem rgba(0, 0, 0, 0.2); + z-index: 2; + outline: none; +} +.outlet_switcher__floor { + display: flex; + flex-direction: column; + overflow-y: auto; +} +.outlet_switcher__button { + display: flex; + align-items: center; + font-size: 1rem; + padding: 0.6rem 0; + font-weight: calc(500 * var(--font-weight-factor)); + &--active { + color: var(--accent-color) !important; + } +} +.outlet-label { + display: grid; + gap: 0.5rem; + text-align: left; + align-items: center; + min-width: 8rem; + font-size: 1.1rem; + margin-bottom: 0.5rem; + align-self: flex-start; + grid-template-areas: "label icon" "num num"; + .icon { + grid-area: icon; + fill: var(--accent-color); + justify-self: flex-end; + } +} +.outlet-label__name { + font-size: 1.7rem; + color: rgba(var(--text-color), 0.5); + font-weight: calc(900 * var(--font-weight-factor)); +} +.outlet-label__no { + grid-area: num; + display: flex; + position: relative; + line-height: 1; + font-size: 8rem; + font-weight: 900; + -webkit-text-stroke: 1rem var(--accent-color); + -webkit-text-fill-color: var(--background-color); + margin: 0 0.5rem; + &::after { + content: attr(data-number); + position: absolute; + line-height: 1; + font-size: 1em; + font-weight: inherit; + -webkit-text-stroke: 0; + color: var(--background-color); + } +} +.auto-grid-layout { + justify-content: flex-start; + overflow-x: auto; +} +.grid-2 { + grid-template-columns: auto 1fr; +} + +.rooms__header { + z-index: 1; + display: flex; + align-items: center; + margin-bottom: 1.5rem; + background: var(--background-color); + box-shadow: 0 1rem 1rem -1rem rgba(0, 0, 0, 0.2); +} +.room__label { + position: relative; + display: flex; + align-items: center; + font-weight: calc(700 * var(--font-weight-factor)); + padding-right: 1.5rem; + font-size: 1.5rem; +} +.room-button { + position: relative; + opacity: 0.6; + flex-shrink: 0; + border-radius: 0; + font-weight: calc(500 * var(--font-weight-factor)); + font-size: 1.1rem; + transition: opacity 0.3s, background-color 0.3s; + padding: 0.6rem 0.8rem; + &:not(:last-of-type)::after { + content: ""; + height: 0.1rem; + width: 4rem; + margin-left: 1rem; + align-self: center; + background: var(--accent-color); + } + &[active] { + opacity: 1; + color: var(--accent-color); + .icon { + fill: var(--accent-color); + } + } +} + +.people-grid { + display: grid; + gap: 3rem 1.5rem; + grid-template-columns: repeat(auto-fill, minmax(13rem, 1fr)); +} + +.rooms-layout { + position: relative; + display: grid; + gap: 1rem; + grid-template-columns: 1fr 1fr; + margin-bottom: 4rem; +} +.room-tile { + display: flex; + position: relative; + border-radius: 0.5rem; + transition: transform 0.3s; + background-color: rgba(var(--foreground-color), 1); + box-shadow: 0 1rem 3rem -1rem rgba(0, 0, 0, 0.1); + -webkit-tap-highlight-color: transparent; + &--main { + padding-top: 100%; + grid-row: span 2; + .tile-content { + position: absolute; + bottom: 0; + } + } + .tile-content { display: flex; - position: relative; - flex-direction: column; - align-items: center; - text-align: center; - // position: absolute; - bottom: 0; - left: 0; width: 100%; height: 100%; -} -.feature__icon{ - display: flex; - align-items: center; - margin-bottom: 1rem; padding: 1.5rem; - border-radius: 50%; - background-color: rgba(var(--text-color), 0.06); - .icon{ - height: 2.5rem; - width: 2.5rem; - fill: rgba(var(--text-color), 0.9); - } + align-self: flex-end; + flex-direction: column; + } + &:active { + transform: scale(0.95); + } } -.feature__title{ - color: rgba(var(--text-color), 0.9); - font-size: 1.2rem; - margin-bottom: 0.5rem; +.room-tile__icon { + position: absolute; + height: 6rem; + width: 6rem; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + // margin-bottom: 1rem; + &:not(.room-tile__icon--colored) { + fill: rgba(var(--text-color), 0.1); + } } -.feature__brief{ - font-size: 0.9rem; - color: rgba(var(--text-color), 0.8); +.investors-icon { + height: 8rem; + width: 8rem; } -#line_sample{ - width: 2rem; - height: 0.2rem; +.room-tile__title { + // font-size: 1.2rem; + // border-bottom: 1px solid; + font-size: 0.9rem; + padding: 0.4rem 0.8rem; + border: solid 0.1rem var(--secondary-text-color); + color: var(--secondary-text-color); + border-radius: 0.3rem; + // align-self: flex-start; +} +#performance_preview { + margin-top: auto; + & > * { + padding: 0; + box-shadow: none; + } +} +#expanding_tile { + position: fixed; + border-radius: 0.5rem; + background-color: rgba(var(--foreground-color), 1); + z-index: 5; +} + +.room-container { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 6; + overflow-y: auto; + background-color: var(--background-color); + grid-template-rows: auto auto 1fr auto; + align-items: flex-start; +} +.room { + padding-bottom: 4rem; +} + +.room-container__header { + display: flex; + position: sticky; + top: 0; + z-index: 2; + background-color: inherit; + padding: 1rem 0; + &::before { + position: absolute; + content: ""; + width: 1rem; + height: 100%; + left: -1rem; + top: 0; + background-color: inherit; + } +} +#hero_title { + font-size: 2rem; + margin-bottom: 2rem; + font-weight: calc(700 * var(--font-weight-factor)); +} + +.room-container__footer { + position: sticky; + display: flex; + bottom: 0; + z-index: 2; + overflow-x: auto; + align-items: center; + padding: 2rem 0.5rem 0.5rem 3rem; + margin-left: -3rem; + background: linear-gradient( + 0deg, + var(--background-color) 70%, + rgba(0, 0, 0, 0) 100% + ); + & > h4 { margin-right: 1rem; - background: linear-gradient(90deg, #f49080, #80b6f4); + } } -.graph-container{ - min-height: 16rem; - margin: 1rem 0 4rem 0; +#room_switcher { + display: grid; + gap: 0.5rem; + grid-auto-flow: column; + justify-content: flex-start; } -.link-container{ - display: grid; - gap: 1rem; - justify-items: flex-start; - align-items: center; + +.room-shortcut { + .room-tile__title { + font-weight: 500; + font-size: 0.9rem; + } +} + +.ext-link-tile { + position: relative; + display: flex; + padding: 1.5rem; + border-radius: 0.5rem; + background-size: contain; + align-items: center; + justify-content: space-between; + border: solid 0.1rem var(--banner-color); + box-shadow: 0 1rem 3rem -1rem rgba(0, 0, 0, 0.2); + -webkit-tap-highlight-color: transparent; + overflow: hidden; +} +.tile__title { + font-size: 1.25rem; + line-height: 1; + font-weight: calc(500 * var(--font-weight-factor)); + z-index: 1; +} +.tile__brief { + margin-top: 1rem; + z-index: 1; + color: rgba(var(--text-color), 0.7); +} +.round { + display: inline-flex; + flex-shrink: 0; + padding: 0.4rem 1rem; + border-radius: 0.3rem; + color: white; + background-color: var(--banner-color); + font-weight: 700 !important; + font-size: 1rem; + z-index: 1; +} + +.timeline-container { + display: grid; + padding: 3rem 0; + gap: 4rem; +} +.timeline-item { + position: relative; + display: grid; + padding-left: 1rem; + &:not(:last-of-type):before { + content: ""; + position: absolute; + width: 0.1rem; + height: calc(100% + 4rem); + top: 0; + left: 0; + background-color: rgba(var(--text-color), 0.7); + } + &:after { + content: ""; + position: absolute; + height: 0.6rem; + width: 0.6rem; + border-radius: 50%; + top: 0; + left: -0.25rem; + background-color: rgba(var(--text-color), 1); + } +} +.timeline-item__header { + display: flex; + font-size: 0.8rem; + padding: 0.5rem 0.8rem; + border-radius: 0.2rem; + justify-self: flex-start; + transform: translateY(-0.8rem); + box-shadow: 0 0 0 1px rgba(var(--text-color), 0.6); + background-color: rgba(var(--foreground-color), 1); +} + +.features-grid { + display: grid; + gap: 3rem 2rem; + margin-bottom: 5rem; +} +.feature { + display: flex; + position: relative; + flex-direction: column; + align-items: center; + text-align: center; + // position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 100%; +} +.feature__icon { + display: flex; + align-items: center; + margin-bottom: 1rem; + padding: 1.5rem; + border-radius: 50%; + background-color: rgba(var(--text-color), 0.06); + .icon { + height: 2.5rem; + width: 2.5rem; + fill: rgba(var(--text-color), 0.9); + } +} +.feature__title { + color: rgba(var(--text-color), 0.9); + font-size: 1.2rem; + margin-bottom: 0.5rem; +} +.feature__brief { + font-size: 0.9rem; + color: rgba(var(--text-color), 0.8); +} +#line_sample { + width: 2rem; + height: 0.2rem; + margin-right: 1rem; + background: linear-gradient(90deg, #f49080, #80b6f4); +} +.graph-container { + min-height: 16rem; + margin: 1rem 0 4rem 0; +} +.link-container { + display: grid; + gap: 1rem; + justify-items: flex-start; + align-items: center; } @media only screen and (max-width: 640px) { - .hide-on-mobile{ - display: none; + .hide-on-mobile { + display: none; + } + .outlet-preview { + gap: 1.5rem; + } + .outlet-preview__number-container { + grid-row: 1/2; + } + .outlet-preview__number::after { + left: 0; + } + .outlet-preview__number, + .outlet-label__no { + font-size: 5rem; + } + #outlet_switcher { + width: calc(100% - 2rem); + } + .outlet-label { + grid-row: 1/2; + } + .outlet-hero-section { + margin-top: 2rem; + } + .outlet-label__no { + margin-bottom: 2rem; + } + .series-container { + gap: 1rem; + } + .outlet-list__item { + .icon { + margin-left: auto; } - .outlet-preview{ - gap: 1.5rem; + } + .rooms__header { + flex-direction: column; + align-items: flex-start; + scroll-tab-header { + width: calc(100vw - 2rem); } - .outlet-preview__number-container{ - grid-row: 1/2; + } + .room-tile { + padding-top: 100%; + &--main { + // padding-top: 50%; + grid-column: span 2; } - .outlet-preview__number::after{ - left: 0; - } - .outlet-preview__number, - .outlet-label__no{ - font-size: 5rem; - } - #outlet_switcher{ - width: calc(100% - 2rem); - } - .outlet-label{ - grid-row: 1/2; - } - .outlet-hero-section{ - margin-top: 2rem; - } - .outlet-label__no{ - margin-bottom: 2rem; - } - .series-container{ - gap: 1rem; - } - .outlet-list__item{ - .icon{ - margin-left: auto; - } - } - .rooms__header{ - flex-direction: column; - align-items: flex-start; - scroll-tab-header{ - width: calc(100vw - 2rem); - } - } - .room-tile{ - padding-top: 100%; - &--main{ - // padding-top: 50%; - grid-column: span 2; - } - .tile-content{ - top: 0; - padding: 1rem; - position: absolute; - } - } - .room-tile__icon{ - height: 4rem; - width: 4rem; - } - .investors-icon{ - height: 6rem; - width: 6rem; - } - #hero_title{ - margin-top: 2rem; - } - .ext-link-tile{ - padding: 1rem; - flex-direction: column; - align-items: flex-start; - } - .link-container{ - margin-top: 1.5rem; + .tile-content { + top: 0; + padding: 1rem; + position: absolute; } + } + .room-tile__icon { + height: 4rem; + width: 4rem; + } + .investors-icon { + height: 6rem; + width: 6rem; + } + #hero_title { + margin-top: 2rem; + } + .ext-link-tile { + padding: 1rem; + flex-direction: column; + align-items: flex-start; + } + .link-container { + margin-top: 1.5rem; + } } @media only screen and (min-width: 640px) { - #home_page,.page, - .page-layout{ - grid-template-columns: 1fr 90vw 1fr; + #home_page, + .page, + .page-layout { + grid-template-columns: 1fr 90vw 1fr; + } + .h1 { + font-size: 4rem; + } + .h2 { + font-size: 2.5rem; + } + .h3 { + font-size: 1.5rem; + } + .h4 { + font-size: 1.1rem; + } + #main_header { + padding: 1.2rem 2rem; + } + #floor_list { + gap: 8vw; + padding: 0 8vw 4rem 8vw; + } + .floor_list__item { + position: relative; + grid-template-columns: 1fr 1fr; + align-items: center; + justify-content: center; + .floor_list__header { + display: grid; } - .h1{ - font-size: 4rem; - } - .h2{ - font-size: 2.5rem; - } - .h3{ - font-size: 1.5rem; - } - .h4{ - font-size: 1.1rem; - } - #main_header{ - padding: 1.2rem 2rem; - } - #floor_list{ - gap: 8vw; - padding: 0 8vw 4rem 8vw; - } - .floor_list__item{ - position: relative; - grid-template-columns: 1fr 1fr; - align-items: center; - justify-content: center; - .floor_list__header{ - display: grid; - } - &:not(:last-of-type){ - padding-bottom: 8vw; - &::after{ - content: ''; - position: absolute; - width: 24rem; - height: 0.2rem; - bottom: 0; - background-color: var(--accent-color); - justify-self: center; - } - } - &:nth-of-type(odd){ - .floor_list__header{ - text-align: right; - grid-column: 2/3; - grid-row: 1/2; - } - .outlet-list{ - grid-row: 1/2; - grid-column: 1/2; - } - } - } - .floor__header{ - &::before{ - left: -10%; - width: 10%; - } - &::after{ - right: -10%; - width: 10%; - } - } - .outlets-container{ - gap: 1.5rem; - } - .outlet-preview{ - gap: 1rem; - padding: 5rem 4rem; - grid-template-columns: 1.2fr 1fr; - border: 1px solid rgba(0, 0, 0, 0.2); - box-shadow: 0 4rem 3rem -2rem rgba(0, 0, 0, 0.06); - &:nth-of-type(even){ - grid-template-columns: 1fr 2fr; - .outlet-preview__info{ - grid-column: 2/3; - } - .outlet-preview__number-container{ - grid-column: 1/2; - grid-row: 1/2; - } - .outlet-preview__number::after{ - left: 0; - } - } - &:nth-of-type(odd){ - .outlet-preview__number-container{ - margin-left: auto; - text-align: right; - } - .outlet-preview__number::after{ - right: 0; - } - } - } - .outlet__title{ - font-size: 2.5rem; - } - #outlet_switcher{ - padding: 1rem 1.5rem; - } - .outlet-label{ - grid-column: 2/3; - justify-self: right; - } - .outlet-label__no{ - justify-content: flex-end; - } - .outlet-hero-section{ - position: relative; - grid-template-columns: 1fr auto; - gap: 1.5rem; - margin-top: 4rem; - } - .auto-grid-layout{ - grid-template-columns: auto 1fr; - } - .rooms-layout{ - grid-template-rows: 1fr 1fr; - } - .room-container__header{ - padding: 1.5rem 0; - } - .people-grid{ - gap: 5rem 3rem; - } - #hero_title{ - font-size: 3rem; - } - .feature__title{ - font-size: 1.5rem; - } - .features-grid{ - grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr)); - } - .graph-container{ - width: 80%; - min-height: 60vh; + &:not(:last-of-type) { + padding-bottom: 8vw; + &::after { + content: ""; + position: absolute; + width: 24rem; + height: 0.2rem; + bottom: 0; + background-color: var(--accent-color); justify-self: center; + } } + &:nth-of-type(odd) { + .floor_list__header { + text-align: right; + grid-column: 2/3; + grid-row: 1/2; + } + .outlet-list { + grid-row: 1/2; + grid-column: 1/2; + } + } + } + .floor__header { + &::before { + left: -10%; + width: 10%; + } + &::after { + right: -10%; + width: 10%; + } + } + .outlets-container { + gap: 1.5rem; + } + .outlet-preview { + gap: 1rem; + padding: 5rem 4rem; + grid-template-columns: 1.2fr 1fr; + border: 1px solid rgba(0, 0, 0, 0.2); + box-shadow: 0 4rem 3rem -2rem rgba(0, 0, 0, 0.06); + &:nth-of-type(even) { + grid-template-columns: 1fr 2fr; + .outlet-preview__info { + grid-column: 2/3; + } + .outlet-preview__number-container { + grid-column: 1/2; + grid-row: 1/2; + } + .outlet-preview__number::after { + left: 0; + } + } + &:nth-of-type(odd) { + .outlet-preview__number-container { + margin-left: auto; + text-align: right; + } + .outlet-preview__number::after { + right: 0; + } + } + } + .outlet__title { + font-size: 2.5rem; + } + #outlet_switcher { + padding: 1rem 1.5rem; + } + .outlet-label { + grid-column: 2/3; + justify-self: right; + } + .outlet-label__no { + justify-content: flex-end; + } + .outlet-hero-section { + position: relative; + grid-template-columns: 1fr auto; + gap: 1.5rem; + margin-top: 4rem; + } + .auto-grid-layout { + grid-template-columns: auto 1fr; + } + .rooms-layout { + grid-template-rows: 1fr 1fr; + } + .room-container__header { + padding: 1.5rem 0; + } + .people-grid { + gap: 5rem 3rem; + } + #hero_title { + font-size: 3rem; + } + .feature__title { + font-size: 1.5rem; + } + .features-grid { + grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr)); + } + .graph-container { + width: 80%; + min-height: 60vh; + justify-self: center; + } } @media only screen and (min-width: 1280px) { - #home_page, .page, - .page-layout{ - grid-template-columns: 1fr 85vw 1fr; - } - .grid-3{ - justify-content: center; - & > .grid{ - width: 100%; - } - } - .rooms-layout{ - grid-template-columns: repeat(3, 1fr); - grid-auto-flow: column; - } - .link-container{ - grid-template-columns: auto auto; + #home_page, + .page, + .page-layout { + grid-template-columns: 1fr 85vw 1fr; + } + .grid-3 { + justify-content: center; + & > .grid { + width: 100%; } + } + .rooms-layout { + grid-template-columns: repeat(3, 1fr); + grid-auto-flow: column; + } + .link-container { + grid-template-columns: auto auto; + } } -@media (any-hover: hover){ - ::-webkit-scrollbar{ - width: 0.5rem; - height: 0.5rem; +@media (any-hover: hover) { + ::-webkit-scrollbar { + width: 0.5rem; + height: 0.5rem; + } + + ::-webkit-scrollbar-thumb { + background: rgba(var(--text-color), 0.3); + border-radius: 1rem; + &:hover { + background: rgba(var(--text-color), 0.5); } - - ::-webkit-scrollbar-thumb{ - background: rgba(var(--text-color), 0.3); - border-radius: 1rem; - &:hover{ - background: rgba(var(--text-color), 0.5); - } + } + .page-link { + cursor: pointer; + transition: color 0.3s; + &:hover { + color: var(--accent-color); + .icon { + fill: var(--accent-color); + } } - .page-link{ - cursor: pointer; - transition: color 0.3s; - &:hover{ - color: var(--accent-color); - .icon{ - fill: var(--accent-color); - } - } + } + .floor__button:hover { + background: var(--background-color); + } + .outlet-list__item { + .icon { + fill: var(--accent-color); + opacity: 0; + transform-origin: left; + transform: translateX(-0.5rem); + transition: opacity 0.3s, transform 0.3s; } - .floor__button:hover{ - background: var(--background-color); + &:hover .icon { + opacity: 1; + transform: translateX(0); } - .outlet-list__item{ - .icon{ - fill: var(--accent-color); - opacity: 0; - transform-origin: left; - transform: translateX(-0.5rem); - transition: opacity 0.3s, transform 0.3s; - } - &:hover .icon{ - opacity: 1; - transform: translateX(0); - } + } + .intern__level { + transition: transform 0.3s; + &:hover { + transform: scale(1.1); } - .intern__level{ - transition: transform 0.3s; - &:hover{ - transform: scale(1.1); - } - } -} \ No newline at end of file + } +} diff --git a/assets/investors/Margot Borden.jpg b/assets/investors/Margot Borden.jpg index 39e42b4..ce161a0 100644 Binary files a/assets/investors/Margot Borden.jpg and b/assets/investors/Margot Borden.jpg differ diff --git a/assets/investors/Puneet Sondh.jpg b/assets/investors/Puneet Sondh.jpg new file mode 100644 index 0000000..5ef7a2c Binary files /dev/null and b/assets/investors/Puneet Sondh.jpg differ diff --git a/assets/investors/Vikash Saw.jpg b/assets/investors/Vikash Saw.jpg new file mode 100644 index 0000000..f73d070 Binary files /dev/null and b/assets/investors/Vikash Saw.jpg differ diff --git a/assets/js/components.js b/assets/js/components.js index 2cbf966..8fbd859 100644 --- a/assets/js/components.js +++ b/assets/js/components.js @@ -1,3292 +1,3 @@ -//Button -const smButton = document.createElement('template') -smButton.innerHTML = ` - -`; -customElements.define('sm-button', - class extends HTMLElement { - constructor() { - super() - this.attachShadow({ - mode: 'open' - }).append(smButton.content.cloneNode(true)) - } - - get disabled() { - return this.isDisabled - } - - set disabled(value) { - if (value && !this.isDisabled) { - this.isDisabled = true - this.setAttribute('disabled', '') - this.button.removeAttribute('tabindex') - } else if (!value && this.isDisabled) { - this.isDisabled = false - this.removeAttribute('disabled') - } - } - - dispatch() { - if (this.isDisabled) { - this.dispatchEvent(new CustomEvent('disabled', { - bubbles: true, - composed: true - })) - } else { - this.dispatchEvent(new CustomEvent('clicked', { - bubbles: true, - composed: true - })) - } - } - - connectedCallback() { - this.isDisabled = false - this.button = this.shadowRoot.querySelector('.button') - if (this.hasAttribute('disabled') && !this.isDisabled) - this.isDisabled = true - this.addEventListener('click', (e) => { - this.dispatch() - }) - } - }) - -//Input -const smInput = document.createElement('template') -smInput.innerHTML = ` - -
- -
-
-`; -customElements.define('sm-input', - class extends HTMLElement { - - static formAssociated = true; - - constructor() { - super() - this.attachShadow({ - mode: 'open' - }).append(smInput.content.cloneNode(true)) - } - - static get observedAttributes() { - return ['placeholder'] - } - - get value() { - return this.shadowRoot.querySelector('input').value - } - - set value(val) { - this.shadowRoot.querySelector('input').value = val; - this.checkInput() - this.fireEvent() - } - - get placeholder() { - return this.getAttribute('placeholder') - } - - set placeholder(val) { - this.setAttribute('placeholder', val) - } - - get type() { - return this.getAttribute('type') - } - - get isValid() { - return this.shadowRoot.querySelector('input').checkValidity() - } - - get validity() { - return this.shadowRoot.querySelector('input').validity - } - - set disabled(value) { - if (value) - this.shadowRoot.querySelector('.input').classList.add('disabled') - else - this.shadowRoot.querySelector('.input').classList.remove('disabled') - } - set readOnly(value) { - if (value) { - this.shadowRoot.querySelector('input').setAttribute('readonly', '') - this.shadowRoot.querySelector('.input').classList.add('readonly') - } else { - this.shadowRoot.querySelector('input').removeAttribute('readonly') - this.shadowRoot.querySelector('.input').classList.remove('readonly') - } - } - - setValidity = (message) => { - this.feedbackText.textContent = message - } - - showValidity = () => { - this.feedbackText.classList.remove('hide-completely') - } - - hideValidity = () => { - this.feedbackText.classList.add('hide-completely') - } - - focusIn = () => { - this.input.focus() - } - - focusOut = () => { - this.input.blur() - } - - fireEvent = () => { - let event = new Event('input', { - bubbles: true, - cancelable: true, - composed: true - }); - this.dispatchEvent(event); - } - - checkInput = (e) => { - if (!this.readonly) { - if (this.input.value !== '') { - this.clearBtn.classList.remove('hide') - } else { - this.clearBtn.classList.add('hide') - } - } - if (!this.hasAttribute('placeholder') || this.getAttribute('placeholder') === '') return; - if (this.input.value !== '') { - if (this.animate) - this.inputParent.classList.add('animate-label') - else - this.label.classList.add('hide') - } else { - if (this.animate) - this.inputParent.classList.remove('animate-label') - else - this.label.classList.remove('hide') - } - } - - - connectedCallback() { - this.inputParent = this.shadowRoot.querySelector('.input') - this.clearBtn = this.shadowRoot.querySelector('.clear') - this.label = this.shadowRoot.querySelector('.label') - this.feedbackText = this.shadowRoot.querySelector('.feedback-text') - this.valueChanged = false; - this.readonly = false - this.isNumeric = false - this.min - this.max - this.animate = this.hasAttribute('animate') - this.input = this.shadowRoot.querySelector('input') - this.shadowRoot.querySelector('.label').textContent = this.getAttribute('placeholder') - if (this.hasAttribute('value')) { - this.input.value = this.getAttribute('value') - this.checkInput() - } - if (this.hasAttribute('required')) { - this.input.setAttribute('required', '') - } - if (this.hasAttribute('min')) { - let minValue = this.getAttribute('min') - this.input.setAttribute('min', minValue) - this.min = parseInt(minValue) - } - if (this.hasAttribute('max')) { - let maxValue = this.getAttribute('max') - this.input.setAttribute('max', maxValue) - this.max = parseInt(maxValue) - } - if (this.hasAttribute('minlength')) { - const minValue = this.getAttribute('minlength') - this.input.setAttribute('minlength', minValue) - } - if (this.hasAttribute('maxlength')) { - const maxValue = this.getAttribute('maxlength') - this.input.setAttribute('maxlength', maxValue) - } - if (this.hasAttribute('step')) { - const steps = this.getAttribute('step') - this.input.setAttribute('step', steps) - } - if (this.hasAttribute('pattern')) { - this.input.setAttribute('pattern', this.getAttribute('pattern')) - } - if (this.hasAttribute('readonly')) { - this.input.setAttribute('readonly', '') - this.readonly = true - } - if (this.hasAttribute('disabled')) { - this.inputParent.classList.add('disabled') - } - if (this.hasAttribute('error-text')) { - this.feedbackText.textContent = this.getAttribute('error-text') - } - if (this.hasAttribute('type')) { - if (this.getAttribute('type') === 'number') { - this.input.setAttribute('inputmode', 'numeric') - this.input.setAttribute('type', 'number') - this.isNumeric = true - } else - this.input.setAttribute('type', this.getAttribute('type')) - } else - this.input.setAttribute('type', 'text') - this.input.addEventListener('input', e => { - this.checkInput(e) - }) - this.clearBtn.addEventListener('click', e => { - this.value = '' - }) - } - - attributeChangedCallback(name, oldValue, newValue) { - if (oldValue !== newValue) { - if (name === 'placeholder') { - this.shadowRoot.querySelector('.label').textContent = newValue; - this.setAttribute('aria-label', newValue); - } - } - } - }) - -//textarea -const smTextarea = document.createElement('template') -smTextarea.innerHTML = ` - - -`; -customElements.define('sm-textarea', - class extends HTMLElement { - constructor() { - super() - this.attachShadow({ - mode: 'open' - }).append(smTextarea.content.cloneNode(true)) - this.textarea = this.shadowRoot.querySelector('textarea') - } - get value() { - return this.textarea.value - } - set value(val) { - this.textarea.value = val; - this.textareaBox.dataset.value = val - this.checkInput() - this.fireEvent() - } - focusIn = () => { - this.textarea.focus() - } - fireEvent() { - let event = new Event('input', { - bubbles: true, - cancelable: true, - composed: true - }); - this.dispatchEvent(event); - } - checkInput = () => { - if (!this.hasAttribute('placeholder') || this.getAttribute('placeholder') === '') - return; - if (this.textarea.value !== '') { - this.placeholder.classList.add('hide') - } else { - this.placeholder.classList.remove('hide') - } - } - connectedCallback() { - this.textareaBox = this.shadowRoot.querySelector('.textarea') - this.placeholder = this.shadowRoot.querySelector('.placeholder') - - if(this.hasAttribute('placeholder')) - this.placeholder.textContent = this.getAttribute('placeholder') - - if (this.hasAttribute('value')) { - this.textarea.value = this.getAttribute('value') - this.checkInput() - } - if (this.hasAttribute('required')) { - this.textarea.setAttribute('required', '') - } - if (this.hasAttribute('readonly')) { - this.textarea.setAttribute('readonly', '') - } - if (this.hasAttribute('rows')) { - this.textarea.setAttribute('rows', this.getAttribute('rows')) - } - this.textarea.addEventListener('input', e => { - this.textareaBox.dataset.value = this.textarea.value - this.checkInput() - }) - } - }) - -// tab -const smTab = document.createElement('template') -smTab.innerHTML = ` - -
- -
-`; - -customElements.define('sm-tab', class extends HTMLElement { - constructor() { - super() - this.shadow = this.attachShadow({ - mode: 'open' - }).append(smTab.content.cloneNode(true)) - } -}) - -//chcekbox - -const smCheckbox = document.createElement('template') -smCheckbox.innerHTML = ` - -` -customElements.define('sm-checkbox', class extends HTMLElement { - constructor() { - super() - this.attachShadow({ - mode: 'open' - }).append(smCheckbox.content.cloneNode(true)) - - this.checkbox = this.shadowRoot.querySelector('.checkbox'); - this.input = this.shadowRoot.querySelector('input') - - this.isChecked = false - this.isDisabled = false - } - - static get observedAttributes() { - return ['disabled', 'checked'] - } - - get disabled() { - return this.isDisabled - } - - set disabled(val) { - if (val) { - this.setAttribute('disabled', '') - } else { - this.removeAttribute('disabled') - } - } - - get checked() { - return this.isChecked - } - - set checked(value) { - if (value) { - this.setAttribute('checked', '') - } - else { - this.removeAttribute('checked') - } - } - - set value(val) { - this.val = val - this.setAttribute('value', value) - } - - get value() { - return getAttribute('value') - } - - dispatch = () => { - this.dispatchEvent(new CustomEvent('change', { - bubbles: true, - composed: true - })) - } - handleKeyup = e => { - if ((e.code === "Enter" || e.code === "Space") && this.isDisabled == false) { - if (this.hasAttribute('checked')) { - this.input.checked = false - this.removeAttribute('checked') - } - else { - this.input.checked = true - this.setAttribute('checked', '') - } - } - } - handleChange = e => { - if (this.input.checked) { - this.setAttribute('checked', '') - } - else { - this.removeAttribute('checked') - } - } - - connectedCallback() { - this.val = '' - this.addEventListener('keyup', this.handleKeyup) - this.input.addEventListener('change', this.handleChange) - } - attributeChangedCallback(name, oldValue, newValue) { - if (oldValue !== newValue) { - if (name === 'disabled') { - if (newValue === 'true') { - this.isDisabled = true - } else { - this.isDisabled = false - } - } - else if (name === 'checked') { - if (this.hasAttribute('checked')) { - this.isChecked = true - this.input.checked = true - } - else { - this.input.checked = false - this.isChecked = false - } - this.dispatch() - } - } - } - disconnectedCallback() { - this.removeEventListener('keyup', this.handleKeyup) - this.removeEventListener('change', this.handleChange) - } -}) - -//switch - -const smSwitch = document.createElement('template') -smSwitch.innerHTML = ` - -` - -customElements.define('sm-switch', class extends HTMLElement { - constructor() { - super() - this.attachShadow({ - mode: 'open' - }).append(smSwitch.content.cloneNode(true)) - this.switch = this.shadowRoot.querySelector('.switch'); - this.input = this.shadowRoot.querySelector('input') - this.isChecked = false - this.isDisabled = false - } - - static get observedAttributes() { - return ['disabled', 'checked'] - } - - get disabled() { - return this.isDisabled - } - - set disabled(val) { - if (val) { - this.setAttribute('disabled', '') - } else { - this.removeAttribute('disabled') - } - } - - get checked() { - return this.isChecked - } - - set checked(value) { - if (value) { - this.setAttribute('checked', '') - } else { - this.removeAttribute('checked') - } - } - - dispatch = () => { - this.dispatchEvent(new CustomEvent('change', { - bubbles: true, - composed: true - })) - } - - connectedCallback() { - this.addEventListener('keyup', e => { - if ((e.code === "Enter" || e.code === "Space") && !this.isDisabled) { - this.input.click() - } - }) - this.input.addEventListener('click', e => { - if (this.input.checked) - this.checked = true - else - this.checked = false - this.dispatch() - }) - } - attributeChangedCallback(name, oldValue, newValue) { - if (oldValue !== newValue) { - if (name === 'disabled') { - if (this.hasAttribute('disabled')) { - this.disabled = true - } - else { - this.disabled = false - } - } - else if (name === 'checked') { - if (this.hasAttribute('checked')) { - this.isChecked = true - this.input.checked = true - } - else { - this.isChecked = false - this.input.checked = false - } - } - } - } - -}) - -// select -const smSelect = document.createElement('template') -smSelect.innerHTML = ` - -
-
-
- - - -
-
- -
-
`; -customElements.define('sm-select', class extends HTMLElement { - constructor() { - super() - this.attachShadow({ - mode: 'open' - }).append(smSelect.content.cloneNode(true)) - } - static get observedAttributes() { - return ['value'] - } - get value() { - return this.getAttribute('value') - } - set value(val) { - this.setAttribute('value', val) - } - - collapse() { - this.optionList.animate(this.slideUp, this.animationOptions) - this.optionList.classList.add('hide') - this.chevron.classList.remove('rotate') - this.open = false - } - connectedCallback() { - this.availableOptions - this.optionList = this.shadowRoot.querySelector('.options') - this.chevron = this.shadowRoot.querySelector('.toggle') - let slot = this.shadowRoot.querySelector('.options slot'), - selection = this.shadowRoot.querySelector('.selection'), - previousOption - this.open = false; - this.slideDown = [{ - transform: `translateY(-0.5rem)` - }, - { - transform: `translateY(0)` - } - ], - this.slideUp = [{ - transform: `translateY(0)` - }, - { - transform: `translateY(-0.5rem)` - } - ], - this.animationOptions = { - duration: 300, - fill: "forwards", - easing: 'ease' - } - selection.addEventListener('click', e => { - if (!this.open) { - this.optionList.classList.remove('hide') - this.optionList.animate(this.slideDown, this.animationOptions) - this.chevron.classList.add('rotate') - this.open = true - } else { - this.collapse() - } - }) - selection.addEventListener('keydown', e => { - if (e.code === 'ArrowDown' || e.code === 'ArrowRight') { - e.preventDefault() - this.availableOptions[0].focus() - } - if (e.code === 'Enter' || e.code === 'Space') - if (!this.open) { - this.optionList.classList.remove('hide') - this.optionList.animate(this.slideDown, this.animationOptions) - this.chevron.classList.add('rotate') - this.open = true - } else { - this.collapse() - } - }) - this.optionList.addEventListener('keydown', e => { - if (e.code === 'ArrowUp' || e.code === 'ArrowRight') { - e.preventDefault() - if (document.activeElement.previousElementSibling) { - document.activeElement.previousElementSibling.focus() - } - } - if (e.code === 'ArrowDown' || e.code === 'ArrowLeft') { - e.preventDefault() - if (document.activeElement.nextElementSibling) - document.activeElement.nextElementSibling.focus() - } - }) - this.addEventListener('optionSelected', e => { - if (previousOption !== e.target) { - this.setAttribute('value', e.detail.value) - this.shadowRoot.querySelector('.option-text').textContent = e.detail.text; - this.dispatchEvent(new CustomEvent('change', { - bubbles: true, - composed: true, - detail: { - value: e.detail.value - } - })) - if (previousOption) { - previousOption.classList.remove('check-selected') - } - previousOption = e.target; - } - if (!e.detail.switching) - this.collapse() - - e.target.classList.add('check-selected') - }) - slot.addEventListener('slotchange', e => { - this.availableOptions = slot.assignedElements() - if (this.availableOptions[0]) { - let firstElement = this.availableOptions[0]; - previousOption = firstElement; - firstElement.classList.add('check-selected') - this.setAttribute('value', firstElement.getAttribute('value')) - this.shadowRoot.querySelector('.option-text').textContent = firstElement.textContent - this.availableOptions.forEach((element, index) => { - element.setAttribute('data-rank', index + 1); - element.setAttribute('tabindex', "0"); - }) - } - }); - document.addEventListener('mousedown', e => { - if (!this.contains(e.target) && this.open) { - this.collapse() - } - }) - } -}) - -// option -const smOption = document.createElement('template') -smOption.innerHTML = ` - -
- - - - -
`; -customElements.define('sm-option', class extends HTMLElement { - constructor() { - super() - this.attachShadow({ - mode: 'open' - }).append(smOption.content.cloneNode(true)) - } - - sendDetails(switching) { - let optionSelected = new CustomEvent('optionSelected', { - bubbles: true, - composed: true, - detail: { - text: this.textContent, - value: this.getAttribute('value'), - switching: switching - } - }) - this.dispatchEvent(optionSelected) - } - - connectedCallback() { - let validKey = [ - 'ArrowUp', - 'ArrowDown', - 'ArrowLeft', - 'ArrowRight' - ] - this.addEventListener('click', e => { - this.sendDetails() - }) - this.addEventListener('keyup', e => { - if (e.code === 'Enter' || e.code === 'Space') { - e.preventDefault() - this.sendDetails(false) - } - if (validKey.includes(e.code)) { - e.preventDefault() - this.sendDetails(true) - } - }) - if (this.hasAttribute('default')) { - setTimeout(() => { - this.sendDetails() - }, 0); - } - } -}) - -// select -const smStripSelect = document.createElement('template') -smStripSelect.innerHTML = ` - -
-
- - Previous - - -
- -
- - Next - - -
-
`; -customElements.define('sm-strip-select', class extends HTMLElement { - constructor() { - super() - this.attachShadow({ - mode: 'open' - }).append(smStripSelect.content.cloneNode(true)) - } - static get observedAttributes() { - return ['value'] - } - get value() { - return this.getAttribute('value') - } - set value(val) { - this.setAttribute('value', val) - } - scrollLeft = () => { - this.select.scrollBy({ - top: 0, - left: -this.scrollDistance, - behavior: 'smooth' - }) - } - - scrollRight = () => { - this.select.scrollBy({ - top: 0, - left: this.scrollDistance, - behavior: 'smooth' - }) - } - connectedCallback() { - let previousOption, - slot = this.shadowRoot.querySelector('slot'); - this.selectContainer = this.shadowRoot.querySelector('.select-container') - this.select = this.shadowRoot.querySelector('.select') - this.nextArrow = this.shadowRoot.querySelector('.next-item') - this.previousArrow = this.shadowRoot.querySelector('.previous-item') - this.nextGradient = this.shadowRoot.querySelector('.right') - this.previousGradient = this.shadowRoot.querySelector('.left') - this.selectOptions - this.scrollDistance = this.selectContainer.getBoundingClientRect().width - const firstElementObserver = new IntersectionObserver(entries => { - if (entries[0].isIntersecting) { - this.previousArrow.classList.add('hide') - this.previousGradient.classList.add('hide') - } else { - this.previousArrow.classList.remove('hide') - this.previousGradient.classList.remove('hide') - } - }, { - root: this.selectContainer, - threshold: 0.95 - }) - const lastElementObserver = new IntersectionObserver(entries => { - if (entries[0].isIntersecting) { - this.nextArrow.classList.add('hide') - this.nextGradient.classList.add('hide') - } else { - this.nextArrow.classList.remove('hide') - this.nextGradient.classList.remove('hide') - } - }, { - root: this.selectContainer, - threshold: 0.95 - }) - - const selectObserver = new IntersectionObserver(entries => { - if (entries[0].isIntersecting) { - this.scrollDistance = this.selectContainer.getBoundingClientRect().width - } - }) - - selectObserver.observe(this.selectContainer) - this.addEventListener('optionSelected', e => { - if (previousOption === e.target) return; - if (previousOption) - previousOption.classList.remove('active') - e.target.classList.add('active') - e.target.scrollIntoView({ - behavior: 'smooth', - inline: 'center', - block: 'nearest' - }) - this.setAttribute('value', e.detail.value) - this.dispatchEvent(new CustomEvent('change', { - bubbles: true, - composed: true - })) - previousOption = e.target; - }) - slot.addEventListener('slotchange', e => { - this.selectOptions = slot.assignedElements() - firstElementObserver.observe(this.selectOptions[0]) - lastElementObserver.observe(this.selectOptions[this.selectOptions.length - 1]) - if (this.selectOptions[0]) { - let firstElement = this.selectOptions[0]; - this.setAttribute('value', firstElement.getAttribute('value')) - firstElement.classList.add('active') - previousOption = firstElement; - } - }); - this.nextArrow.addEventListener('click', this.scrollRight) - this.previousArrow.addEventListener('click', this.scrollLeft) - } - - disconnectedCallback() { - this.nextArrow.removeEventListener('click', this.scrollRight) - this.previousArrow.removeEventListener('click', this.scrollLeft) - } -}) - -// option -const smStripOption = document.createElement('template') -smStripOption.innerHTML = ` - -
- -
`; -customElements.define('sm-strip-option', class extends HTMLElement { - constructor() { - super() - this.attachShadow({ - mode: 'open' - }).append(smStripOption.content.cloneNode(true)) - } - sendDetails() { - let optionSelected = new CustomEvent('optionSelected', { - bubbles: true, - composed: true, - detail: { - text: this.textContent, - value: this.getAttribute('value') - } - }) - this.dispatchEvent(optionSelected) - } - - connectedCallback() { - this.addEventListener('click', e => { - this.sendDetails() - }) - this.addEventListener('keyup', e => { - if (e.code === 'Enter' || e.code === 'Space') { - e.preventDefault() - this.sendDetails(false) - } - }) - if (this.hasAttribute('default')) { - setTimeout(() => { - this.sendDetails() - }, 0); - } - } -}) - -//popup -const smPopup = document.createElement('template') -smPopup.innerHTML = ` - - -`; -customElements.define('sm-popup', class extends HTMLElement { - constructor() { - super() - this.attachShadow({ - mode: 'open' - }).append(smPopup.content.cloneNode(true)) - - this.allowClosing = false - this.isOpen = false - } - - get open() { - return this.isOpen - } - - resumeScrolling = () => { - const scrollY = document.body.style.top; - window.scrollTo(0, parseInt(scrollY || '0') * -1); - setTimeout(() => { - document.body.style.overflow = 'auto'; - document.body.style.top= 'initial' - }, 300); - } - - show = (pinned, popupStack) => { - if (popupStack) - this.popupStack = popupStack - if (this.popupStack && !this.hasAttribute('open')) { - this.popupStack.push({ - popup: this, - permission: pinned - }) - if (this.popupStack.items.length > 1) { - this.popupStack.items[this.popupStack.items.length - 2].popup.classList.add('stacked') - } - this.dispatchEvent( - new CustomEvent("popupopened", { - bubbles: true, - detail: { - popup: this, - popupStack: this.popupStack - } - }) - ) - this.setAttribute('open', '') - this.pinned = pinned - this.isOpen = true - } - this.popupContainer.classList.remove('hide') - this.popup.style.transform = 'none'; - document.body.style.overflow = 'hidden'; - document.body.style.top= `-${window.scrollY}px` - return this.popupStack - } - hide = () => { - if (window.innerWidth < 640) - this.popup.style.transform = 'translateY(100%)'; - else - this.popup.style.transform = 'translateY(3rem)'; - this.popupContainer.classList.add('hide') - this.removeAttribute('open') - if (typeof this.popupStack !== 'undefined') { - this.popupStack.pop() - if (this.popupStack.items.length) { - this.popupStack.items[this.popupStack.items.length - 1].popup.classList.remove('stacked') - } else { - this.resumeScrolling() - } - } else { - this.resumeScrolling() - } - - if (this.inputFields.length) { - setTimeout(() => { - this.inputFields.forEach(field => { - if (field.type === 'radio' || field.tagName === 'SM-CHECKBOX') - field.checked = false - if (field.tagName === 'SM-INPUT' || field.tagName === 'TEXTAREA'|| field.tagName === 'SM-TEXTAREA') - field.value = '' - }) - }, 300); - } - setTimeout(() => { - this.dispatchEvent( - new CustomEvent("popupclosed", { - bubbles: true, - detail: { - popup: this, - popupStack: this.popupStack - } - }) - ) - this.isOpen = false - }, 300); - } - - handleTouchStart = (e) => { - this.touchStartY = e.changedTouches[0].clientY - this.popup.style.transition = 'transform 0.1s' - this.touchStartTime = e.timeStamp - } - - handleTouchMove = (e) => { - if (this.touchStartY < e.changedTouches[0].clientY) { - this.offset = e.changedTouches[0].clientY - this.touchStartY; - this.touchEndAnimataion = window.requestAnimationFrame(() => this.movePopup()) - } - /*else { - this.offset = this.touchStartY - e.changedTouches[0].clientY; - this.popup.style.transform = `translateY(-${this.offset}px)` - }*/ - } - - handleTouchEnd = (e) => { - this.touchEndTime = e.timeStamp - cancelAnimationFrame(this.touchEndAnimataion) - this.touchEndY = e.changedTouches[0].clientY - this.popup.style.transition = 'transform 0.3s' - this.threshold = this.popup.getBoundingClientRect().height * 0.3 - if (this.touchEndTime - this.touchStartTime > 200) { - if (this.touchEndY - this.touchStartY > this.threshold) { - if (this.pinned) { - this.show() - return - } else - this.hide() - } else { - this.show() - } - } else { - if (this.touchEndY > this.touchStartY) - if (this.pinned) { - this.show() - return - } - else - this.hide() - } - } - - movePopup = () => { - this.popup.style.transform = `translateY(${this.offset}px)` - } - - connectedCallback() { - this.pinned = false - this.popupStack - this.popupContainer = this.shadowRoot.querySelector('.popup-container') - this.popup = this.shadowRoot.querySelector('.popup') - this.popupBodySlot = this.shadowRoot.querySelector('.popup-body slot') - this.offset - this.popupHeader = this.shadowRoot.querySelector('.popup-top') - this.touchStartY = 0 - this.touchEndY = 0 - this.touchStartTime = 0 - this.touchEndTime = 0 - this.touchEndAnimataion; - this.threshold = this.popup.getBoundingClientRect().height * 0.3 - - if (this.hasAttribute('open')) - this.show() - this.popupContainer.addEventListener('mousedown', e => { - if (e.target === this.popupContainer && !this.pinned) { - if (this.pinned) { - this.show() - return - } else - this.hide() - } - }) - - this.popupBodySlot.addEventListener('slotchange', () => { - setTimeout(() => { - this.threshold = this.popup.getBoundingClientRect().height * 0.3 - }, 200); - this.inputFields = this.querySelectorAll('sm-input', 'sm-checkbox', 'textarea', 'sm-textarea', 'radio') - }) - - this.popupHeader.addEventListener('touchstart', (e) => { this.handleTouchStart(e) }, {passive: true}) - this.popupHeader.addEventListener('touchmove', (e) => {this.handleTouchMove(e)}, {passive: true}) - this.popupHeader.addEventListener('touchend', (e) => {this.handleTouchEnd(e)}, {passive: true}) - } - disconnectedCallback() { - this.popupHeader.removeEventListener('touchstart', this.handleTouchStart, {passive: true}) - this.popupHeader.removeEventListener('touchmove', this.handleTouchMove, {passive: true}) - this.popupHeader.removeEventListener('touchend', this.handleTouchEnd, {passive: true}) - } -}) - -//carousel - -const smCarousel = document.createElement('template') -smCarousel.innerHTML = ` - - -`; - -customElements.define('sm-carousel', class extends HTMLElement { - constructor() { - super() - this.attachShadow({ - mode: 'open' - }).append(smCarousel.content.cloneNode(true)) - - this.isAutoPlaying = false - this.autoPlayInterval = 5000 - this.autoPlayTimeout - this.initialTimeout - this.activeSlideNum = 0 - this.carouselItems - this.indicators - this.showIndicator = false - this.carousel = this.shadowRoot.querySelector('.carousel') - this.carouselContainer = this.shadowRoot.querySelector('.carousel-container') - this.carouselSlot = this.shadowRoot.querySelector('slot') - this.nextArrow = this.shadowRoot.querySelector('.carousel__button--right') - this.previousArrow = this.shadowRoot.querySelector('.carousel__button--left') - this.indicatorsContainer = this.shadowRoot.querySelector('.indicators') - } - - static get observedAttributes() { - return ['indicator', 'autoplay', 'interval'] - } - - scrollLeft = () => { - this.carousel.scrollBy({ - left: -this.scrollDistance, - behavior: 'smooth' - }) - } - - scrollRight = () => { - this.carousel.scrollBy({ - left: this.scrollDistance, - behavior: 'smooth' - }) - } - - handleIndicatorClick = (e) => { - if (e.target.closest('.dot')) { - const slideNum = parseInt(e.target.closest('.dot').dataset.rank) - if (this.activeSlideNum !== slideNum) { - this.showSlide(slideNum) - } - } - } - - showSlide = (slideNum) => { - this.carousel.scrollTo({ - left: (this.carouselItems[slideNum].getBoundingClientRect().left - this.carousel.getBoundingClientRect().left + this.carousel.scrollLeft), - behavior: 'smooth' - }) - } - - nextSlide = () => { - if (!this.carouselItems) return - let showSlideNo = (this.activeSlideNum + 1) < this.carouselItems.length ? this.activeSlideNum + 1 : 0 - this.showSlide(showSlideNo) - } - - autoPlay = () => { - this.nextSlide() - if (this.isAutoPlaying) { - this.autoPlayTimeout = setTimeout(() => { - this.autoPlay() - }, this.autoPlayInterval); - } - } - - startAutoPlay = () => { - this.setAttribute('autoplay', '') - } - - stopAutoPlay = () => { - this.removeAttribute('autoplay') - } - - connectedCallback() { - this.scrollDistance = this.carouselContainer.getBoundingClientRect().width / 3 - let frag = document.createDocumentFragment(); - if (this.hasAttribute('indicator')) - this.showIndicator = true - - - let firstVisible = false, - lastVisible = false - const allElementsObserver = new IntersectionObserver(entries => { - entries.forEach(entry => { - if (this.showIndicator) { - const activeRank = parseInt(entry.target.dataset.rank) - if (entry.isIntersecting) { - this.indicators[activeRank].classList.add('active') - this.activeSlideNum = activeRank - } - else - this.indicators[activeRank].classList.remove('active') - } - if (!entry.target.previousElementSibling) - if (entry.isIntersecting) { - this.previousArrow.classList.remove('expand') - firstVisible = true - } - else { - this.previousArrow.classList.add('expand') - firstVisible = false - } - if (!entry.target.nextElementSibling) - if (entry.isIntersecting) { - this.nextArrow.classList.remove('expand') - lastVisible = true - } - else { - this.nextArrow.classList.add('expand') - lastVisible = false - } - if (firstVisible && lastVisible) - this.indicatorsContainer.classList.add('hide') - else - this.indicatorsContainer.classList.remove('hide') - }) - }, { - root: this.carouselContainer, - threshold: 0.9 - }) - - const carouselObserver = new IntersectionObserver(entries => { - if (entries[0].isIntersecting) { - this.scrollDistance = this.carouselContainer.getBoundingClientRect().width / 3 - } - }) - - carouselObserver.observe(this.carouselContainer) - - this.carouselSlot.addEventListener('slotchange', e => { - this.carouselItems = this.carouselSlot.assignedElements() - this.carouselItems.forEach(item => allElementsObserver.observe(item)) - if (this.showIndicator) { - this.indicatorsContainer.innerHTML = `` - this.carouselItems.forEach((item, index) => { - let dot = document.createElement('div') - dot.classList.add('dot') - dot.dataset.rank = index - frag.append(dot) - item.dataset.rank = index - }) - this.indicatorsContainer.append(frag) - this.indicators = this.indicatorsContainer.children - } - }) - - this.addEventListener('keyup', e => { - if (e.code === 'ArrowLeft') - this.scrollRight() - else if (e.code === 'ArrowRight') - this.scrollRight() - }) - - this.nextArrow.addEventListener('click', this.scrollRight) - this.previousArrow.addEventListener('click', this.scrollLeft) - this.indicatorsContainer.addEventListener('click', this.handleIndicatorClick) - } - - async attributeChangedCallback(name, oldValue, newValue) { - if (oldValue !== newValue) { - if (name === 'indicator') { - if (this.hasAttribute('indicator')) - this.showIndicator = true - else - this.showIndicator = false - } - if (name === 'autoplay') { - if (this.hasAttribute('autoplay')) { - this.initialTimeout = setTimeout(() => { - this.isAutoPlaying = true - this.autoPlay() - }, this.autoPlayInterval); - } - else { - this.isAutoPlaying = false - clearTimeout(this.autoPlayTimeout) - clearTimeout(this.initialTimeout) - } - - } - if (name === 'interval') { - if (this.hasAttribute('interval') && this.getAttribute('interval').trim() !== '') { - this.autoPlayInterval = Math.abs(parseInt(this.getAttribute('interval').trim())) - } - else { - this.autoPlayInterval = 5000 - } - } - } - } - - disconnectedCallback() { - this.nextArrow.removeEventListener('click', this.scrollRight) - this.previousArrow.removeEventListener('click', this.scrollLeft) - this.indicatorsContainer.removeEventListener('click', this.handleIndicatorClick) - } -}) - -//notifications - -const smNotifications = document.createElement('template') -smNotifications.innerHTML = ` - -
-` - -customElements.define('sm-notifications', class extends HTMLElement { - constructor() { - super() - this.shadow = this.attachShadow({ - mode: 'open' - }).append(smNotifications.content.cloneNode(true)) - } - - handleTouchStart = (e) => { - this.notification = e.target.closest('.notification') - this.touchStartX = e.changedTouches[0].clientX - this.notification.style.transition = 'initial' - this.touchStartTime = e.timeStamp - } - - handleTouchMove = (e) => { - e.preventDefault() - if (this.touchStartX < e.changedTouches[0].clientX) { - this.offset = e.changedTouches[0].clientX - this.touchStartX; - this.touchEndAnimataion = requestAnimationFrame(this.movePopup) - } else { - this.offset = -(this.touchStartX - e.changedTouches[0].clientX); - this.touchEndAnimataion = requestAnimationFrame(this.movePopup) - } - } - - handleTouchEnd = (e) => { - this.notification.style.transition = 'transform 0.3s, opacity 0.3s' - this.touchEndTime = e.timeStamp - cancelAnimationFrame(this.touchEndAnimataion) - this.touchEndX = e.changedTouches[0].clientX - if (this.touchEndTime - this.touchStartTime > 200) { - if (this.touchEndX - this.touchStartX > this.threshold) { - this.removeNotification(this.notification) - } else if (this.touchStartX - this.touchEndX > this.threshold) { - this.removeNotification(this.notification, true) - } else { - this.resetPosition() - } - } else { - if (this.touchEndX > this.touchStartX) { - this.removeNotification(this.notification) - } else { - this.removeNotification(this.notification, true) - } - } - } - - movePopup = () => { - this.notification.style.transform = `translateX(${this.offset}px)` - } - - resetPosition = () => { - this.notification.style.transform = `translateX(0)` - } - - push = (messageBody, type, pinned) => { - let notification = document.createElement('div'), - composition = `` - notification.classList.add('notification') - if (pinned) - notification.classList.add('pinned') - if (type === 'error') { - composition += ` - - - - - ` - } else if (type === 'success') { - composition += ` - - - ` - } - composition += ` -

${messageBody}

- - Close - - - ` - notification.innerHTML = composition - this.notificationPanel.prepend(notification) - if (window.innerWidth > 640) { - notification.animate([{ - transform: `translateX(1rem)`, - opacity: '0' - }, - { - transform: 'translateX(0)', - opacity: '1' - } - ], this.animationOptions).onfinish = () => { - notification.setAttribute('style', `transform: none;`); - } - } else { - notification.setAttribute('style', `transform: translateY(0); opacity: 1`) - } - notification.addEventListener('touchstart', this.handleTouchStart) - notification.addEventListener('touchmove', this.handleTouchMove) - notification.addEventListener('touchend', this.handleTouchEnd) - } - - removeNotification = (notification, toLeft) => { - if (!this.offset) - this.offset = 0; - - if (toLeft) - notification.animate([{ - transform: `translateX(${this.offset}px)`, - opacity: '1' - }, - { - transform: `translateX(-100%)`, - opacity: '0' - } - ], this.animationOptions).onfinish = () => { - notification.remove() - } - else { - notification.animate([{ - transform: `translateX(${this.offset}px)`, - opacity: '1' - }, - { - transform: `translateX(100%)`, - opacity: '0' - } - ], this.animationOptions).onfinish = () => { - notification.remove() - } - } - } - - clearAll = () => { - Array.from(this.notificationPanel.children).forEach(child => { - this.removeNotification(child) - }) - } - - connectedCallback() { - this.notificationPanel = this.shadowRoot.querySelector('.notification-panel') - this.animationOptions = { - duration: 300, - fill: "forwards", - easing: "ease" - } - this.fontSize = Number(window.getComputedStyle(document.body).getPropertyValue('font-size').match(/\d+/)[0]) - this.notification - this.offset - this.touchStartX = 0 - this.touchEndX = 0 - this.touchStartTime = 0 - this.touchEndTime = 0 - this.threshold = this.notificationPanel.getBoundingClientRect().width * 0.3 - this.touchEndAnimataion; - - this.notificationPanel.addEventListener('click', e => { - if (e.target.closest('.close'))( - this.removeNotification(e.target.closest('.notification')) - ) - }) - - const observer = new MutationObserver(mutationList => { - mutationList.forEach(mutation => { - if (mutation.type === 'childList') { - if (mutation.addedNodes.length) { - if (!mutation.addedNodes[0].classList.contains('pinned')) - setTimeout(() => { - this.removeNotification(mutation.addedNodes[0]) - }, 5000); - if (window.innerWidth > 640) - this.notificationPanel.style.padding = '1.5rem 0 3rem 1.5rem'; - else - this.notificationPanel.style.padding = '1rem 1rem 2rem 1rem'; - } else if (mutation.removedNodes.length && !this.notificationPanel.children.length) { - this.notificationPanel.style.padding = 0; - } - } - }) - }) - observer.observe(this.notificationPanel, { - attributes: true, - childList: true, - subtree: true - }) - } -}) - - - -// sm-menu -const smMenu = document.createElement('template') -smMenu.innerHTML = ` - -
- -
- -
-
`; -customElements.define('sm-menu', class extends HTMLElement { - constructor() { - super() - this.attachShadow({ - mode: 'open' - }).append(smMenu.content.cloneNode(true)) - } - static get observedAttributes() { - return ['value'] - } - get value() { - return this.getAttribute('value') - } - set value(val) { - this.setAttribute('value', val) - } - expand = () => { - if (!this.open) { - this.optionList.classList.remove('hide') - this.optionList.classList.add('no-transformations') - this.open = true - this.icon.classList.add('focused') - this.availableOptions.forEach(option => { - option.setAttribute('tabindex', '0') - }) - } - } - collapse() { - if (this.open) { - this.open = false - this.icon.classList.remove('focused') - this.optionList.classList.add('hide') - this.optionList.classList.remove('no-transformations') - this.availableOptions.forEach(option => { - option.removeAttribute('tabindex') - }) - } - } - connectedCallback() { - this.availableOptions - this.containerDimensions - this.optionList = this.shadowRoot.querySelector('.options') - let slot = this.shadowRoot.querySelector('.options slot'), - menu = this.shadowRoot.querySelector('.menu') - this.icon = this.shadowRoot.querySelector('.icon') - this.open = false; - menu.addEventListener('click', e => { - if (!this.open) { - this.expand() - } else { - this.collapse() - } - }) - menu.addEventListener('keydown', e => { - if (e.code === 'ArrowDown' || e.code === 'ArrowRight') { - e.preventDefault() - this.availableOptions[0].focus() - } - if (e.code === 'Enter' || e.code === 'Space') { - e.preventDefault() - if (!this.open) { - this.expand() - } else { - this.collapse() - } - } - }) - this.optionList.addEventListener('keydown', e => { - if (e.code === 'ArrowUp' || e.code === 'ArrowRight') { - e.preventDefault() - if (document.activeElement.previousElementSibling) { - document.activeElement.previousElementSibling.focus() - } - } - if (e.code === 'ArrowDown' || e.code === 'ArrowLeft') { - e.preventDefault() - if (document.activeElement.nextElementSibling) - document.activeElement.nextElementSibling.focus() - } - }) - this.optionList.addEventListener('click', e => { - this.collapse() - }) - slot.addEventListener('slotchange', e => { - this.availableOptions = slot.assignedElements() - this.containerDimensions = this.optionList.getBoundingClientRect() - }); - window.addEventListener('mousedown', e => { - if (!this.contains(e.target) && e.button !== 2) { - this.collapse() - } - }) - } -}) - -// option -const smMenuOption = document.createElement('template') -smMenuOption.innerHTML = ` - -
- -
`; -customElements.define('sm-menu-option', class extends HTMLElement { - constructor() { - super() - this.attachShadow({ - mode: 'open' - }).append(smMenuOption.content.cloneNode(true)) - } - - connectedCallback() { - this.addEventListener('keyup', e => { - if (e.code === 'Enter' || e.code === 'Space') { - e.preventDefault() - this.click() - } - }) - } -}) \ No newline at end of file +const smButton = document.createElement("template"); smButton.innerHTML = "\n\n
\n \n
", customElements.define("sm-button", class extends HTMLElement { constructor() { super(), this.attachShadow({ mode: "open" }).append(smButton.content.cloneNode(!0)) } static get observedAttributes() { return ["disabled"] } get disabled() { return this.hasAttribute("disabled") } set disabled(t) { t ? this.setAttribute("disabled", "") : this.removeAttribute("disabled") } focusIn() { this.focus() } handleKeyDown(t) { this.hasAttribute("disabled") || "Enter" !== t.key && " " !== t.key || (t.preventDefault(), this.click()) } connectedCallback() { this.hasAttribute("disabled") || this.setAttribute("tabindex", "0"), this.setAttribute("role", "button"), this.addEventListener("keydown", this.handleKeyDown) } attributeChangedCallback(t) { "disabled" === t && (this.hasAttribute("disabled") ? this.removeAttribute("tabindex") : this.setAttribute("tabindex", "0"), this.setAttribute("aria-disabled", this.hasAttribute("disabled"))) } }); +const smNotifications = document.createElement("template"); smNotifications.innerHTML = '\n \n
\n ', customElements.define("sm-notifications", class extends HTMLElement { constructor() { super(), this.shadow = this.attachShadow({ mode: "open" }).append(smNotifications.content.cloneNode(!0)), this.notificationPanel = this.shadowRoot.querySelector(".notification-panel"), this.animationOptions = { duration: 300, fill: "forwards", easing: "cubic-bezier(0.175, 0.885, 0.32, 1.275)" }, this.push = this.push.bind(this), this.createNotification = this.createNotification.bind(this), this.removeNotification = this.removeNotification.bind(this), this.clearAll = this.clearAll.bind(this), this.remove = this.remove.bind(this), this.handlePointerMove = this.handlePointerMove.bind(this), this.startX = 0, this.currentX = 0, this.endX = 0, this.swipeDistance = 0, this.swipeDirection = "", this.swipeThreshold = 0, this.startTime = 0, this.swipeTime = 0, this.swipeTimeThreshold = 200, this.currentTarget = null, this.mediaQuery = window.matchMedia("(min-width: 640px)"), this.handleOrientationChange = this.handleOrientationChange.bind(this), this.isLandscape = !1 } randString(n) { let t = ""; const i = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; for (let e = 0; e < n; e++)t += i.charAt(Math.floor(Math.random() * i.length)); return t } createNotification(n, t = {}) { const { pinned: i = !1, icon: e = "", action: o } = t, r = document.createElement("div"); r.id = this.randString(8), r.classList.add("notification"); let a = ""; return a += `\n
${e}
\n ${n}\n `, o && (a += `\n \n `), i && (r.classList.add("pinned"), a += '\n \n '), r.innerHTML = a, r } push(n, t = {}) { const i = this.createNotification(n, t); return this.isLandscape ? this.notificationPanel.append(i) : this.notificationPanel.prepend(i), this.notificationPanel.animate([{ transform: `translateY(${this.isLandscape ? "" : "-"}${i.clientHeight}px)` }, { transform: "none" }], this.animationOptions), i.animate([{ transform: "translateY(-1rem)", opacity: "0" }, { transform: "none", opacity: "1" }], this.animationOptions).onfinish = (n => { n.target.commitStyles(), n.target.cancel() }), i.querySelector(".action") && i.querySelector(".action").addEventListener("click", t.action.callback), i.id } removeNotification(n, t = "left") { if (!n) return; const i = "left" === t ? "-" : "+"; n.animate([{ transform: this.currentX ? `translateX(${this.currentX}px)` : "none", opacity: "1" }, { transform: `translateX(calc(${i}${Math.abs(this.currentX)}px ${i} 1rem))`, opacity: "0" }], this.animationOptions).onfinish = (() => { n.remove() }) } remove(n) { const t = this.notificationPanel.querySelector(`#${n}`); t && this.removeNotification(t) } clearAll() { Array.from(this.notificationPanel.children).forEach(n => { this.removeNotification(n) }) } handlePointerMove(n) { this.currentX = n.clientX - this.startX, this.currentTarget.style.transform = `translateX(${this.currentX}px)` } handleOrientationChange(n) { this.isLandscape = n.matches, n.matches } connectedCallback() { this.handleOrientationChange(this.mediaQuery), this.mediaQuery.addEventListener("change", this.handleOrientationChange), this.notificationPanel.addEventListener("pointerdown", n => { n.target.closest(".close") ? this.removeNotification(n.target.closest(".notification")) : n.target.closest(".notification") && (this.swipeThreshold = n.target.closest(".notification").getBoundingClientRect().width / 2, this.currentTarget = n.target.closest(".notification"), this.currentTarget.setPointerCapture(n.pointerId), this.startTime = Date.now(), this.startX = n.clientX, this.startY = n.clientY, this.notificationPanel.addEventListener("pointermove", this.handlePointerMove)) }), this.notificationPanel.addEventListener("pointerup", n => { this.endX = n.clientX, this.endY = n.clientY, this.swipeDistance = Math.abs(this.endX - this.startX), this.swipeTime = Date.now() - this.startTime, this.endX > this.startX ? this.swipeDirection = "right" : this.swipeDirection = "left", this.swipeTime < this.swipeTimeThreshold ? this.swipeDistance > 50 && this.removeNotification(this.currentTarget, this.swipeDirection) : this.swipeDistance > this.swipeThreshold ? this.removeNotification(this.currentTarget, this.swipeDirection) : this.currentTarget.animate([{ transform: `translateX(${this.currentX}px)` }, { transform: "none" }], this.animationOptions).onfinish = (n => { n.target.commitStyles(), n.target.cancel() }), this.notificationPanel.removeEventListener("pointermove", this.handlePointerMove), this.notificationPanel.releasePointerCapture(n.pointerId), this.currentX = 0 }); const n = new MutationObserver(n => { n.forEach(n => { "childList" === n.type && n.addedNodes.length && !n.addedNodes[0].classList.contains("pinned") && setTimeout(() => { this.removeNotification(n.addedNodes[0]) }, 5e3) }) }); n.observe(this.notificationPanel, { childList: !0 }) } disconnectedCallback() { mediaQueryList.removeEventListener("change", handleOrientationChange) } }); +const themeToggle = document.createElement("template"); themeToggle.innerHTML = '\n \n \n'; class ThemeToggle extends HTMLElement { constructor() { super(), this.attachShadow({ mode: "open" }).append(themeToggle.content.cloneNode(!0)), this.isChecked = !1, this.hasTheme = "light", this.toggleState = this.toggleState.bind(this), this.fireEvent = this.fireEvent.bind(this), this.handleThemeChange = this.handleThemeChange.bind(this) } static get observedAttributes() { return ["checked"] } daylight() { this.hasTheme = "light", document.body.dataset.theme = "light", this.setAttribute("aria-checked", "false") } nightlight() { this.hasTheme = "dark", document.body.dataset.theme = "dark", this.setAttribute("aria-checked", "true") } toggleState() { this.toggleAttribute("checked"), this.fireEvent() } handleKeyDown(e) { " " === e.key && this.toggleState() } handleThemeChange(e) { e.detail.theme !== this.hasTheme && ("dark" === e.detail.theme ? this.setAttribute("checked", "") : this.removeAttribute("checked")) } fireEvent() { this.dispatchEvent(new CustomEvent("themechange", { bubbles: !0, composed: !0, detail: { theme: this.hasTheme } })) } connectedCallback() { this.setAttribute("role", "switch"), this.setAttribute("aria-label", "theme toggle"), "dark" === localStorage.getItem(`${window.location.hostname}-theme`) ? (this.nightlight(), this.setAttribute("checked", "")) : "light" === localStorage.getItem(`${window.location.hostname}-theme`) ? (this.daylight(), this.removeAttribute("checked")) : window.matchMedia("(prefers-color-scheme: dark)").matches ? (this.nightlight(), this.setAttribute("checked", "")) : (this.daylight(), this.removeAttribute("checked")), this.addEventListener("click", this.toggleState), this.addEventListener("keydown", this.handleKeyDown), document.addEventListener("themechange", this.handleThemeChange) } disconnectedCallback() { this.removeEventListener("click", this.toggleState), this.removeEventListener("keydown", this.handleKeyDown), document.removeEventListener("themechange", this.handleThemeChange) } attributeChangedCallback(e, t, n) { "checked" === e && (this.hasAttribute("checked") ? (this.nightlight(), localStorage.setItem(`${window.location.hostname}-theme`, "dark")) : (this.daylight(), localStorage.setItem(`${window.location.hostname}-theme`, "light"))) } } window.customElements.define("theme-toggle", ThemeToggle); \ No newline at end of file diff --git a/assets/js/index.js b/assets/js/index.js index 64a031d..92e3b7a 100644 --- a/assets/js/index.js +++ b/assets/js/index.js @@ -1,5 +1,18 @@ -const domRefs = {}; +"use strict"; +// Global variables +const { html, render: renderElem } = uhtml; +//Checks for internet connection status +if (!navigator.onLine) + floGlobals.connectionErrorNotification = notify('There seems to be a problem connecting to the internet, Please check you internet connection.', 'error') +window.addEventListener('offline', () => { + floGlobals.connectionErrorNotification = notify('There seems to be a problem connecting to the internet, Please check you internet connection.', 'error') +}) +window.addEventListener('online', () => { + getRef('notification_drawer').remove(floGlobals.connectionErrorNotification) + notify('We are back online.', 'success') +}) +const domRefs = {}; function getRef(elementId) { if (!domRefs.hasOwnProperty(elementId)) { domRefs[elementId] = { @@ -20,70 +33,13 @@ function getRef(elementId) { } function create(tagName, obj) { - const {className, text} = obj + const { className, text } = obj const elem = document.createElement(tagName) elem.className = className elem.textContent = text return elem } -//Checks for internet connection status -if (!navigator.onLine) - notify( - "There seems to be a problem connecting to the internet, Please check you internet connection.", - "error", - "", - true - ); -window.addEventListener("offline", () => { - notify( - "There seems to be a problem connecting to the internet, Please check you internet connection.", - "error", - true, - true - ); -}); -window.addEventListener("online", () => { - getRef("notification_drawer").clearAll(); - notify("We are back online.", "success"); -}); - -if (getRef("theme_switcher")) { - if (localStorage.theme === "dark") { - nightlight(); - getRef("theme_switcher").checked = true; - } else if (localStorage.theme === "light"){ - daylight(); - getRef("theme_switcher").checked = false; - } - else { - if (window.matchMedia(`(prefers-color-scheme: dark)`).matches) { - nightlight(); - getRef("theme_switcher").checked = true; - } else { - daylight(); - getRef("theme_switcher").checked = false; - } - } - - function daylight() { - document.body.setAttribute("data-theme", "light"); - } - - function nightlight() { - document.body.setAttribute("data-theme", "dark"); - } - getRef("theme_switcher").addEventListener("change", function (e) { - if (this.checked) { - nightlight(); - localStorage.setItem("theme", "dark"); - } else { - daylight(); - localStorage.setItem("theme", "light"); - } - }); -} - function setAttributes(el, attrs) { for (key in attrs) { el.setAttribute(key, attrs[key]); @@ -121,14 +77,21 @@ function randomColor() { } //Function for displaying toast notifications. pass in error for mode param if you want to show an error. -function notify(message, mode, pinned, sound) { - if (mode === "error") console.error(message); - else console.log(message); - getRef("notification_drawer").push(message, mode, pinned); - if (navigator.onLine && sound) { - getRef("notification_sound").currentTime = 0; - getRef("notification_sound").play(); +function notify(message, mode, options = {}) { + let icon + switch (mode) { + case 'success': + icon = `` + break; + case 'error': + icon = `` + options.pinned = true + break; } + if (mode === 'error') { + console.error(message) + } + return getRef("notification_drawer").push(message, { icon, ...options }); } const currentYear = new Date().getFullYear(); @@ -249,27 +212,40 @@ const siteMap = [ outlets: [ { name: "Bitcoin Bonds", - url: "bitcoinbonds.html", + outletLinks: [ + { + label: "Explore", + url: "bitcoinbonds.html", + } + ], brief: `Bondholders get a minimum guarantee of 13% interest per annum during the lock-in period or 50% of all Bitcoin price gains whichever is higher. It offers full capital protection if Bitcoin prices fall below acquisition price.`, - // isSold: true, - buyUrl: `purchase_room`, status: `We are servicing current customers only. A new Blockchain-based version of Bitcoin Bonds will be available soon.` }, { name: `Bob's Fund`, - url: `bob'sfund.html`, + outletLinks: [ + { + label: "Explore", + url: "bob'sfund.html", + } + ], brief: `Bobs Fund is a 20 year long term Bitcoin price linked product. Investors are entitled to 100% of Bitcoin price gains, but they must hold for 20 years.`, - // isSold: true, - buyUrl: `purchase_room`, status: `We are servicing current customers only. A new Blockchain-based version of Bob's Fund will be available soon.` }, { name: "Initial Coin Offering", - url: "ico.html", + outletLinks: [ + { + label: "Explore", + url: "ico.html", + }, + { + label: "Buy", + url: "ico.html#purchase_room", + }, + ], brief: `The Initial Coin Offering (ICO) of RanchiMall was launched in 2017. It was envisioned to sell 21 million tokens over 14 phases over 3 years.`, - isSold: true, - buyUrl: `purchase_room` }, ], }, @@ -357,191 +333,190 @@ const siteMap = [ } ], }, */ + { + floor: 'Internship', + brief: ``, + outlets: [ + { + name: "RanchiMall Internship Blockchain contract", + brief: `This outlet has the list of all active projects being executed through our internship program. Interns can apply or they can join active projects here.`, + outletLinks: [ + { + label: "Explore", + url: "https://ranchimall.github.io/RIBC/", + outbound: true, + } + ], + }, + { + name: `Certificates`, + brief: `This outlet has access to blockchain verification to all of RanchiMall issued Internship & Employment certificates`, + outletLinks: [ + { + label: "See Intern Payments", + url: "https://ranchimall.github.io/ribcpayments/", + outbound: true, + }, + { + label: "Verify Certificate", + url: "verify.html", + }, + { + label: "Check issued certificates", + url: "https://www.ranchimall.net/certify/", + outbound: true, + } + ], + } + ], + }, ]; -// templates - -const bitBondRowTemplate = document.createElement('template') -bitBondRowTemplate.innerHTML = ` -
-
-
Series
-

-
-
-
-
Invested
-

$100

-
-
-
Current value
-

-
- - - -
-
-
- -
-` - -const bobsFundRowTemplate = document.createElement('template') -bobsFundRowTemplate.innerHTML = ` -
-
-
FLO ID
-

-
-
-
-
Invested
-

-
-
-

Current value

-

-
- - - -
-
-
-
-` - - -const floorListitemTemplate = document.createElement('template') -floorListitemTemplate.innerHTML = ` -
  • - - -
  • -` - -const outletListitemTemplate = document.createElement('template') -outletListitemTemplate.innerHTML = ` -
  • - -
    -

    -

    -
    - -
    -
  • -` - +function formatAmount(amount, currency = 'USD') { + return amount.toLocaleString(currency === 'USD'? 'en-US': 'en-IN', { style: 'currency', currency: currency }); +} const render = { - bitBondRow(obj) { - const { series, currentValue, timeElapsed, percentGain } = obj; - const row = bitBondRowTemplate.content.cloneNode(true); - row.querySelector(".original-value").textContent = series.toLocaleString(`en-US`, { style: 'currency', currency: 'USD' }); - row.querySelector(".current-value").textContent = currentValue.toLocaleString(`en-US`, { style: 'currency', currency: 'USD' }); - row.querySelector(".time-elapsed").textContent = `In last ${timeElapsed} years`; - row.querySelector(".percent-gain").textContent = `${percentGain}%`; - return row; - }, - bobFundRow(obj) { - const { investorName, invested, floId, currentValue, timeElapsed, gain } = obj; - const row = bobsFundRowTemplate.content.cloneNode(true); - row.querySelector(".person__name").textContent = floId; - row.querySelector(".original-value").textContent = `${invested.toLocaleString(`en-IN`, { style: 'currency', currency: 'INR' })}`; - row.querySelector(".current-value").textContent = `${currentValue.toLocaleString(`en-IN`, { style: 'currency', currency: 'INR' })}`; - row.querySelector(".percent-gain").textContent = `${gain}%`; - row.querySelector(".time-elapsed").textContent = `In last ${timeElapsed} years`; - return row; - }, - icoInvestorRow(obj, options) { - const { extension, investorName, bio, contribution } = obj; - const { thumbnail } = options; - const row = getRef("ico_investor_row").content.cloneNode(true); - const card = row.querySelector(".person-card"); - const folder = thumbnail ? "investors-thumbnail" : "investors"; - const investorImage = row.querySelector(".person__image"); - if (thumbnail) card.classList.add("person-card--small"); - else card.classList.add("person-card--big"); - investorImage.src = `assets/${folder}/${investorName}.${extension}`; - investorImage.setAttribute("alt", `${investorName} profile picture`); - row.querySelector(".person__name").textContent = investorName; - row.querySelector(".investor__bio").textContent = bio; - row.querySelector(".investor__contribution").textContent = contribution; - return row; - }, - internCard(obj) { - const { extension, internName, level, floId, project } = obj; - const card = getRef("intern_card_template").content.cloneNode(true).firstElementChild; - const investorImage = card.querySelector(".person__image"); - investorImage.src = `assets/interns/${internName}.${extension}`; - investorImage.setAttribute("alt", `${internName} profile picture`); - card.querySelector(".intern__level").classList.add(level.toLowerCase()) - card.querySelector(".intern__level").textContent = level; - card.querySelector(".person__name").textContent = internName; - card.querySelector(".intern-flo-id").textContent = floId; - card.querySelector(".intern__project").textContent = project; - return card; + bitBondRow(obj) { + const { series, currentValue, timeElapsed, percentGain } = obj; + return html` +
    +
    +
    Series
    +

    ${formatAmount(series)}

    +
    +
    +
    +
    Invested
    +

    $100

    +
    +
    +
    Current value
    +

    ${formatAmount(currentValue)}

    +
    + + ${ `${percentGain}%`} + ${`In last ${timeElapsed} years`} +
    +
    +
    +
    + `; + }, + bobFundRow(obj) { + const { invested, floId, currentValue, timeElapsed, gain } = obj; + return html` +
    +
    +
    FLO ID
    +

    ${floId}

    +
    +
    +
    +
    Invested
    +

    ${formatAmount(invested, 'INR')}

    +
    +
    +

    Current value

    +

    ${formatAmount(currentValue)}

    +
    + + ${`${gain}%`} + ${`In last ${timeElapsed} years`} +
    +
    +
    +
    + `; + }, + icoInvestorRow(obj, options) { + const { extension, investorName, bio, contribution } = obj; + const { thumbnail } = options; + const folder = thumbnail ? "investors-thumbnail" : "investors"; + return html` +
    + ${`${investorName} +
    +

    ${investorName}

    +

    ${bio}

    +
    +
    +

    ${contribution}

    +
    +
    + `; }, +// internCard(obj) { +// const { extension, internName, level, floId, project } = obj; +// const card = getRef("intern_card_template").content.cloneNode(true).firstElementChild; +// const investorImage = card.querySelector(".person__image"); +// investorImage.src = `assets/interns/${internName}.${extension}`; +// investorImage.setAttribute("alt", `${internName} profile picture`); +// card.querySelector(".intern__level").classList.add(level.toLowerCase()) +// card.querySelector(".intern__level").textContent = level; +// card.querySelector(".person__name").textContent = internName; +// card.querySelector(".intern-flo-id").textContent = floId; +// card.querySelector(".intern__project").textContent = project; +// return card; +// }, floorLabel(floorNumber, offsetTop) { - const floorLabel = getRef("floor_indicator_template").content.cloneNode( - true - ).firstElementChild; - floorLabel.setAttribute("style", `top: ${offsetTop}px`); - floorLabel.dataset.target = `floor_${floorNumber}`; - return floorLabel; + return html` +
    + +
    + `; }, outletListItem(outletObj) { - const { name, brief, url } = outletObj - const li = outletListitemTemplate.content.cloneNode(true).firstElementChild - li.querySelector('a').href = `${url}` - li.querySelector('.outlet-title').textContent = name - // li.querySelector('.outlet-brief').textContent = brief ? brief : '' - return li + const { name, brief, outletLinks } = outletObj + return html` +
  • + +
    +

    ${name}

    + ${brief ? html`

    ${brief}

    ` : ''} +
    + +
    +
  • + `; }, - floorListitem(floorObj, index) { + floorListItem(floorObj, index) { const { floor, outlets } = floorObj - const li = floorListitemTemplate.content.cloneNode(true).firstElementChild - li.firstElementChild.dataset.target = `floor_${index + 1}`; - li.querySelector('.h3').textContent = floor - li.querySelector('.floor-num').textContent = `floor ${index + 1}` - - const h3 = document.createElement('h3') - h3.classList.add('h3', 'weight-900', 'floor-list__outlet') - h3.textContent = 'Outlets' - - const frag = document.createDocumentFragment() - outlets.forEach(outlet => frag.append(render.outletListItem(outlet))) - - li.querySelector('.outlet-list').append(h3, frag) + const li = html` +
  • + + +
  • + `; return li }, outletSwitcherButton(outletObj, activeOutlet) { - const { name, url } = outletObj + const { name, outletLinks } = outletObj const button = document.createElement('a') button.classList.add('outlet_switcher__button') - if (activeOutlet === url) { + if (activeOutlet === outletLinks[0].url) { button.classList.add('outlet_switcher__button--active') } - button.href = url + button.href = outletLinks[0].url button.textContent = name return button; }, - statusBanner(bannerMsg) { - const banner = document.createElement('section') - banner.classList.add('banner') - banner.innerHTML = ` - - + statusBanner(bannerMsg) { + return html.node` + ` - return banner } }; @@ -739,44 +714,23 @@ function hideOutletSwitcher() { let currentPage function renderSiteMap() { - const frag = document.createDocumentFragment() - siteMap.forEach((floor, index) => frag.append(render.floorListitem(floor, index))) - getRef('floor_list').append(frag) + getRef('floor_list').append(html.node`${siteMap.map((floor, index) =>render.floorListItem(floor, index))}`) const pathArray = location.pathname.split('/') - for (floor of siteMap) { - for (outlet of floor.outlets) { - currentPage = pathArray[pathArray.length - 1] - if (pathArray[pathArray.length - 1].includes(outlet.url)) { - renderFloorOutlets(floor, outlet.url) - break; - } - } - } + siteMap.forEach((floor) => { + const matchedOutlet = floor.outlets.find(outlet => pathArray[pathArray.length - 1].includes(outlet.outletLinks[0].url)) + if (matchedOutlet) + renderFloorOutlets(floor, matchedOutlet.outletLinks[0].url) + }) } renderSiteMap() function renderFloorOutlets(floorObj, activeOutlet) { const { floor, outlets } = floorObj - console.log(floor) const frag = document.createDocumentFragment() outlets.forEach(outlet => frag.append(render.outletSwitcherButton(outlet, activeOutlet))) getRef('outlet_switcher__outlet_container').append(frag) getRef('outlet_switcher__floor_num').textContent = floor - let floorNum = -1 - let outletNum = -1 - for (let i = 0; i < siteMap.length; i++) { - if (siteMap[i].floor === floor) { - floorNum = i - break - } - } - for (let i = 0; i < outlets.length; i++) { - if (outlets[i].url === activeOutlet) { - outletNum = i - break - } - } - // document.querySelector('.outlet-label__name').textContent = floorNum > -1 ? `Floor ${floorNum + 1} outlet ${outletNum + 1}` : '' + const outletNum = outlets.findIndex(o => o.outletLinks[0].url === activeOutlet) document.querySelector('.outlet-label__no').textContent = outletNum + 1 document.querySelector('.outlet-label__no').dataset.number = outletNum + 1 if (outlets[outletNum].hasOwnProperty('status')) { @@ -900,10 +854,10 @@ function showRoom(roomId, animate = false) { roomContainer.classList.remove('hide-completely') if (animate && !isRoomOpen) { roomContainer.animate(slideInDown, animeInOptions) - .onfinish = () => { - getRef('expanding_tile').classList.add('hide-completely') - isRoomOpen = true - } + .onfinish = () => { + getRef('expanding_tile').classList.add('hide-completely') + isRoomOpen = true + } } else { isRoomOpen = true @@ -947,7 +901,7 @@ function renderRoomShorcuts() { if (room.href.split('#').pop() !== window.location.hash.split('#').pop()) { const clone = room.cloneNode(true) clone.classList.remove('room-tile', 'room-tile--main') - if(clone.querySelector('img, svg, #performance_preview')) + if (clone.querySelector('img, svg, #performance_preview')) clone.querySelectorAll('img, svg, #performance_preview').forEach(elem => elem.remove()) clone.classList.add('room-shortcut') frag.append(clone) @@ -964,19 +918,19 @@ const heroTitleObserver = new IntersectionObserver(entries => { entries.forEach(entry => { if (entry.isIntersecting) { getRef('room_title').animate(slideOutDown, animeInOptions) - .onfinish = () => { - getRef('room_title').classList.add('hide-completely') - } + .onfinish = () => { + getRef('room_title').classList.add('hide-completely') + } } else { - if (isRoomOpen) - getRef('room_title').classList.remove('hide-completely') + if (isRoomOpen) + getRef('room_title').classList.remove('hide-completely') getRef('room_title').animate(slideInUp, animeInOptions) } }) }, { - threshold: 1 + threshold: 1 } ) @@ -984,6 +938,6 @@ if (getRef('hero_title')) { heroTitleObserver.observe(getRef('hero_title')) } -function getRandom(min, max){ +function getRandom(min, max) { return Math.floor(Math.random() * (max - min + 1) + min); } \ No newline at end of file diff --git a/bitcoinbonds.html b/bitcoinbonds.html index e29c97e..2b3a6cd 100644 --- a/bitcoinbonds.html +++ b/bitcoinbonds.html @@ -30,20 +30,22 @@
    - +
    @@ -55,12 +57,13 @@

    Bitcoin Bonds

    How does it work?

    - Bondholders get a minimum guarantee of 13% interest per annum during the lock-in period or 50% of all Bitcoin price gains whichever is higher. + Bondholders get a minimum guarantee of 13% interest per annum during the lock-in period or 50% of + all Bitcoin price gains whichever is higher. It offers full capital protection if Bitcoin prices fall below acquisition price.

    - +
    @@ -93,7 +80,10 @@
    @@ -101,7 +91,21 @@
    - + + + + + + + +

    Investors

    @@ -109,7 +113,11 @@
    - + + +

    Product

    @@ -118,7 +126,15 @@
    - + + + + +

    Buy

    @@ -128,7 +144,10 @@
    @@ -139,8 +158,10 @@

    - Please refer to the whitepaper here for detailed terms. - RanchiMall Initial Coin Offering (ICO) abides by the terms we offered in our ICO whitepaper available + Please refer to the whitepaper here for detailed terms. + RanchiMall Initial Coin Offering (ICO) abides by the terms we offered in our ICO whitepaper + available at link above. We have made certain changes in our terms as our learning has improved. All these changes are to support the interests of our long term investors.

    @@ -148,7 +169,8 @@
    1. - RanchiMall Tokens (RMT) now own the financial gains emerging from all our blockchain contracts + RanchiMall Tokens (RMT) now own the financial gains emerging from all our blockchain + contracts

    2. @@ -164,14 +186,16 @@
    3. Number of RMTs tokens in circulation has been paused to - 10000 instead of a release schedule of 21 million in 3 years. The un-issued tokens will stay vested + 10000 instead of a release schedule of 21 million in 3 years. The un-issued tokens will + stay vested with the Founder of RanchiMall.

    4. The price discovery during active phase has been USD 1500 per - token giving RMTs in circulation a valuation of 150 million USD. Unless this price is realised in open + token giving RMTs in circulation a valuation of 150 million USD. Unless this price is + realised in open makets on sustainable basis, new tokens will not be put in circulation.

    5. @@ -180,8 +204,10 @@

      Currently we are not selling any RanchiMall Tokens (RMT).
      You can buy tokens at - our last valuation in our exchange to become a - token holder and be part of our community’s learning process. Our products are aimed at long term investors. + our last valuation in our + exchange to become a + token holder and be part of our community’s learning process. Our products are aimed at long + term investors.
      Once you become a token holder, please be patient and be prepared to stay the whole course of journey. You will not regret it.

      @@ -193,8 +219,9 @@
      - + + + \ No newline at end of file diff --git a/incorporationblockchaincontract.html b/incorporationblockchaincontract.html index e841e39..10f52fb 100644 --- a/incorporationblockchaincontract.html +++ b/incorporationblockchaincontract.html @@ -28,22 +28,24 @@
      -
      +
      - +
      @@ -67,9 +69,16 @@

      Incorporation Blockchain Contract

      @@ -82,13 +91,23 @@

      Rooms

      @@ -126,8 +148,10 @@
      - - - + + + + + \ No newline at end of file diff --git a/index.html b/index.html index 1c64a64..292543c 100644 --- a/index.html +++ b/index.html @@ -1,5 +1,6 @@ + @@ -11,40 +12,20 @@ + - - - - - - - - - -
      @@ -54,36 +35,37 @@
      - +
      -
      - - + + - + \ No newline at end of file diff --git a/internshipblockchaincontract.html b/internshipblockchaincontract.html index c16df7d..d832b54 100644 --- a/internshipblockchaincontract.html +++ b/internshipblockchaincontract.html @@ -30,44 +30,62 @@

      Level

      -

      Details

      +

      Details

      Starter

      - Starter Level is the qualification level. This is learning stage and will lead to award of certificates to those who clear this level. In general we do not want to pay at this at level because money changes motivations. And we want to identify most passionate interns at their level, who would love their work even if no monetary consideration is involved + Starter Level is the qualification level. This is learning stage and will lead to award of + certificates to those who clear this level. In general we do not want to pay at this at level + because money changes motivations. And we want to identify most passionate interns at their level, + who would love their work even if no monetary consideration is involved

      Motivated

      - Motivated is one time rewards stage. The complexity of projects will increase in this stage. If projects are successfully completed, then one time rewards will be given. All this will be known before hand. Project details, acceptance criteria, and amounts will be notified in advance to interns. + Motivated is one time rewards stage. The complexity of projects will increase in this stage. If + projects are successfully completed, then one time rewards will be given. All this will be known + before hand. Project details, acceptance criteria, and amounts will be notified in advance to + interns.

      Passionate

      - Passionate is the first regular fixed stipend stage. The projects complexity will increase still further. This will be full scale commercial grade project. if 3 such projects are completed then one of the criteria to move into self driven stage will be met. Now we are looking for interns who in addition to being passionate are self driven, and can independently take on and complete full projects without day to day supervision. + Passionate is the first regular fixed stipend stage. The projects complexity will increase still + further. This will be full scale commercial grade project. if 3 such projects are completed then one + of the criteria to move into self driven stage will be met. Now we are looking for interns who in + addition to being passionate are self driven, and can independently take on and complete full + projects without day to day supervision.

      Self Driven

      - Self Driven interns is the stage where are we are considering interns for permanent employment with Ranchi Mall. The internship stipends will be higher. Some of self driven interns will be guide interns in other levels. The key criteria is ability of complete jobs with high quality, and them taking self initiative. + Self Driven interns is the stage where are we are considering interns for permanent employment with + Ranchi Mall. The internship stipends will be higher. Some of self driven interns will be guide + interns in other levels. The key criteria is ability of complete jobs with high quality, and them + taking self initiative.

      - +
        -
        +
        - +
        @@ -120,26 +140,57 @@

        Internship Blockchain Contract

        - Internship Blockchain Contract tokenizes all our internship initiatives. This is ownedby Incorporation Blockchain Contract. + Internship Blockchain Contract tokenizes all our internship initiatives. This is ownedby Incorporation + Blockchain Contract.

        Rooms

        - - - + + + + + \ No newline at end of file diff --git a/new-layout.html b/new-layout.html index 9178ac0..685597d 100644 --- a/new-layout.html +++ b/new-layout.html @@ -28,41 +28,49 @@
        -
        +
        - +
        - -

        Performance

        - + + +

        Product

        - + + + + +

        Buy

        @@ -142,7 +198,10 @@
        @@ -154,16 +213,20 @@

        - Bobs Fund allows customers to take a direct share in Bitcoin and they are automatically guided into a + Bobs Fund allows customers to take a direct share in Bitcoin and they are automatically guided + into a long term investment plan. Bitcoin is a long term investors paradise with supply artificially - constrained, and demand only growing. There are no price guarantees in this product. But the long - duration of the investment ensures that customers will get an outsized rate of return. RanchiMall as + constrained, and demand only growing. There are no price guarantees in this product. But the + long + duration of the investment ensures that customers will get an outsized rate of return. + RanchiMall as Fund Manager does not charge management fees.

        Risk Management

        There is no price risk for RanchiMall in Bobs Fund. But since this is a long term - product, information security risks are high to maintain Bitcoins safely. Bitcoin keys must be split + product, information security risks are high to maintain Bitcoins safely. Bitcoin keys must be + split using Shamir Secret Key Share algorithm, and should be recombined at the time of redemption. The number of shares should have enough redundancy so that if some holders are not around, the keys must still be recovered. @@ -171,12 +234,15 @@

        Founder Notes

        Bobs Fund was first issued in my MBA classmates WhatsApp group, and restricted only to my - classmates in June 2017. The product had a long term duration of 20 years, and it needed lot of trust + classmates in June 2017. The product had a long term duration of 20 years, and it needed lot of + trust which my classamtes had in me. We kept this product concept under observation and testing for 4 - years, before exploring options to make it public. Another objective was to try out an idea where + years, before exploring options to make it public. Another objective was to try out an idea + where fund management expenses are nil, as fund management fees eats up a lot of customer returns over long term. Instead we made an equal investment as every contributing member did, and we hope to - earn over the long life time of this product. Over time we realized, we could also use the Bitcoin as + earn over the long life time of this product. Over time we realized, we could also use the + Bitcoin as collateral for DeFi products, and that gives us an additional earning stream.

        @@ -190,7 +256,7 @@
        - +

        See Bob's Fund in action

        Visit the website to see investors and asset performance

        @@ -200,8 +266,9 @@
        - + + + \ No newline at end of file diff --git a/webwallet.html b/webwallet.html index 464f4a8..5962caf 100644 --- a/webwallet.html +++ b/webwallet.html @@ -26,22 +26,25 @@
        -
        +
        - +
        @@ -83,8 +86,8 @@

        Rooms