diff --git a/css/main.css b/css/main.css index 96ee84c..149b5b3 100644 --- a/css/main.css +++ b/css/main.css @@ -9,7 +9,7 @@ :root { scroll-behavior: smooth; - font-size: clamp(16px, 1.2vmax, 48px); + font-size: clamp(1rem, 1.2vmax, 3rem); } html, body { @@ -17,7 +17,7 @@ html, body { } body { - --accent-color:#d60739; + --accent-color:#5b00d3; --secondary-color: #ffac2e; --text-color: 17, 17, 17; --text-color-light: 100, 100, 100; @@ -33,7 +33,7 @@ body #scroll_to_bottom { } body[data-theme=dark] { - --accent-color: rgb(214 7 57); + --accent-color:#923eff; --secondary-color: #d60739; --text-color: 240, 240, 240; --text-color-light: 170, 170, 170; @@ -562,7 +562,7 @@ sm-button[variant=primary] .icon { gap: 0 1rem; padding: 0.8rem 1.5rem; align-items: center; - min-height: max-content; + flex-shrink: 0; } .contact.chat { grid-template-columns: auto 1fr auto; @@ -647,10 +647,6 @@ sm-button[variant=primary] .icon { color: rgba(var(--text-color), 0.8); margin: 1rem 0; justify-self: center; - align-self: flex-start; -} - -.date-card { align-self: center; } @@ -665,6 +661,10 @@ sm-button[variant=primary] .icon { background: var(--accent-color); } +.mail-card.unread .time, +.contact.unread .time { + color: var(--accent-color); +} .mail-card.unread h4, .mail-card.unread h5, .mail-card.unread p, .contact.unread h4, .contact.unread h5, @@ -867,17 +867,18 @@ sm-button[variant=primary] .icon { bottom: 0; left: 0; right: 0; - height: 100%; - width: 100%; z-index: 1; padding-bottom: 1.5rem; background: rgba(var(--foreground-color), 1); transition: transform 0.3s; - transform: translateX(-100%); + transform: translateX(-110%); } #contacts #all_contacts .header { padding-bottom: 1rem; } +#contacts #contacts_container { + height: calc(100vh - 7.3rem); +} #selected_contacts { padding: 1.5rem; @@ -891,6 +892,12 @@ sm-button[variant=primary] .icon { margin-bottom: 0; } +#selected_contacts_container { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(6rem, 1fr)); + gap: 1rem; +} + #contacts, #mails { position: relative; grid-template-rows: max-content 1fr; @@ -909,6 +916,17 @@ sm-button[variant=primary] .icon { #contacts .header sm-tab::part(tab), #mails .header sm-tab::part(tab), #settings_page .header sm-tab::part(tab) { padding: 0.8rem 1rem; } +#contacts .header .expanding-search, #mails .header .expanding-search, #settings_page .header .expanding-search { + position: absolute; + width: 100%; + padding: 0.7rem 1.5rem; + background: linear-gradient(rgba(var(--text-color), 0.06), rgba(var(--text-color), 0.06)), rgba(var(--foreground-color), 1); + clip-path: circle(0% at calc(100% - 4rem) center); + transition: clip-path 0.3s; +} +#contacts .header .expanding-search.expand, #mails .header .expanding-search.expand, #settings_page .header .expanding-search.expand { + clip-path: circle(100%); +} #contacts .header sm-input, #mails .header sm-input, #settings_page .header sm-input { margin: 0; width: 100%; @@ -920,7 +938,7 @@ sm-button[variant=primary] .icon { } #contacts .header sm-input::part(input), #mails .header sm-input::part(input), #settings_page .header sm-input::part(input) { border-radius: 3rem; - padding: 0.5rem 1rem; + padding: 0.3rem 0.8rem; } #contacts .header h4, #mails .header h4, #settings_page .header h4 { text-transform: capitalize; @@ -1234,14 +1252,6 @@ sm-button[variant=primary] .icon { overflow-y: auto; } -#dm_container, -#contacts_container, -#inbox_mail_container, -#sent_mail_container { - height: auto; - min-height: 100%; -} - #dm_container:empty { display: none; } diff --git a/css/main.min.css b/css/main.min.css index 955c955..3fa1aa5 100644 --- a/css/main.min.css +++ b/css/main.min.css @@ -1 +1 @@ -#landing_page,.sign-in-box,body,body #scroll_to_bottom{background:rgba(var(--foreground-color),1)}p,textarea{line-height:1.6}.card,.flex,.popup-header{display:flex}.align-center,.popup-header{align-items:center}.contact .last-message,.copy-row .copy,.mail-card .sender,.text-overflow{text-overflow:ellipsis;white-space:nowrap}*,::after,::before{padding:0;margin:0;box-sizing:border-box;font-family:Roboto,sans-serif}:root{scroll-behavior:smooth;font-size:clamp(16px,1.2vmax,48px)}body,html{height:100%}body{--accent-color:#d60739;--secondary-color:#ffac2e;--text-color:17,17,17;--text-color-light:100,100,100;--foreground-color:255,255,255;--background-color:#efefef;--error-color:red;color:rgba(var(--text-color),1)}body #scroll_to_bottom{box-shadow:0 .3rem .4rem rgba(0,0,0,.2)}body[data-theme=dark]{--accent-color:rgb(214 7 57);--secondary-color:#d60739;--text-color:240,240,240;--text-color-light:170,170,170;--foreground-color:20,20,20}body[data-theme=dark] .initial{color:rgba(var(--text-color),1)!important;box-shadow:0 .1rem .1rem rgba(0,0,0,.16)}body[data-theme=dark] .message,h1,h2,h3,h4,h5,textarea{color:rgba(var(--text-color),1)}body[data-theme=dark] #scroll_to_bottom{background:linear-gradient(rgba(var(--text-color),.1),rgba(var(--text-color),.1)),rgba(var(--foreground-color),1);box-shadow:0 .4rem .4rem rgba(0,0,0,.3)}h1{font-size:3rem}h2{font-size:2rem}h3{font-size:1.5rem}h4{font-size:1.1rem}h5{font-size:.8rem}h1,h2,h3,h4,h5{font-weight:600}textarea{background:rgba(var(--text-color),.06);border:none;border-radius:.3rem;width:100%;padding:1rem;font-size:1rem;resize:none}textarea:focus{outline:0;box-shadow:0 0 0 .1rem var(--accent-color)}strong{font-weight:500}.grid{display:grid}.grid-2{grid-template-columns:auto auto;gap:1em}.justify-right{margin-left:auto}.direction-column{flex-direction:column}.rest{flex:1}.hide{opacity:0;pointer-events:none}.hide-completely{display:none!important}.no-transformations{transform:none!important}.breakable{overflow-wrap:break-word}.text-overflow{overflow:hidden}.sticky{position:sticky;top:1rem}.light-text{color:rgba(var(--text-color-light),1)}.accent-color{color:var(--accent-color)}.secondary-color{color:var(--secondary-color)}.fab{filter:drop-shadow(0 .4rem .3rem rgba(0, 0, 0, .2));margin:1.5rem;position:fixed;right:0;bottom:0;z-index:1}.fab::part(button){padding:.9rem 1.6rem}.fab .icon{margin-left:0!important;margin-right:.5rem;height:.9rem!important;stroke-width:8!important}a:any-link{word-wrap:break-word;color:var(--accent-color);font-weight:500}.solid-background{background:var(--background-color)!important}.normal-weight{font-weight:400}.icon{fill:none;stroke-width:6;stroke:rgba(var(--text-color),1);height:1.2rem;width:1.2rem;overflow:visible;stroke-linecap:round;stroke-linejoin:round}span.ripple{position:absolute;border-radius:50%;transform:scale(0);background:rgba(var(--text-color),.2);pointer-events:none}#landing_illustration,.contact,.initial,.interact,.logo-section{position:relative}.interact{overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:transparent}sm-popup sm-input+sm-input{margin-top:1rem}.popup-header{padding:.5rem 1.5rem 0;width:100%}.popup-header .icon{padding:.7rem;height:2.4rem;width:2.4rem;stroke-width:8;transform:translateX(-.5rem);cursor:pointer;-webkit-tap-highlight-color:transparent}.popup-header .back{transform:none}.popup-header button,.popup-header sm-button{width:auto;margin-left:auto}.copy-row{display:grid;grid-template-columns:1fr auto;align-items:center;gap:.5rem;width:auto}.copy-row .icon{cursor:pointer;padding:.4rem;height:1.8rem;width:1.8rem}.copy-row .copy{overflow:hidden}.copy-row h4{margin-bottom:0!important}#confirmation_popup,#prompt_popup{flex-direction:column}#confirmation_popup h4,#prompt_popup h4{font-weight:500;margin-bottom:.5rem}#confirmation_popup sm-button,#prompt_popup sm-button{margin:0}#confirmation_popup .flex,#prompt_popup .flex{padding:0;margin-top:2rem}#confirmation_popup .flex sm-button:first-of-type,#prompt_popup .flex sm-button:first-of-type{margin-right:.6rem;margin-left:auto}.card,sm-button{margin:1rem 0}.page{align-items:flex-start;width:100%;height:100%}.card{flex-direction:column}sm-button .icon{margin-right:.4rem}sm-button[variant=primary]{--foreground-color:255,255,255}sm-button[variant=primary] .icon{align-self:center;height:1rem;width:1rem;margin-left:.8rem;stroke-width:6;stroke:#fff}.logo-section{align-items:center;height:max-content;margin:.5rem 0}.logo-section h5{font-size:1.1rem!important;font-weight:500}.logo-section .main-logo{height:1.4rem;margin-right:.4rem;fill:rgba(var(--text-color),.8);stroke:none}.logo-section img{width:2rem;margin-right:.5rem}.select-file input[type=file]{display:none}#landing{display:grid;border-radius:.6rem;width:100%;padding:0 1.5rem;height:100%;align-items:center}#landing .logo-section{padding:1.5rem;display:flex}#landing .title-font{line-height:1.2;font-weight:700;font-size:2.5rem}#landing .left h3,#landing .left h4,#landing .left p,.contact .last-message,.contact .name,.sign-in-box h3,.sign-in-box h4,.sign-in-box h5{font-weight:500}#landing .left{display:grid;flex-direction:column;padding-bottom:1.5rem;z-index:1}#landing .left h4{color:rgba(var(--foreground-color),1)}#landing .left sm-button{margin:1.5rem 0 2rem;width:max-content}#landing .left h3{margin-bottom:1rem}.logo-section{padding:1.5rem}#landing_illustration{width:100%}#sign_in_popup::part(popup-body){padding:0}.sign-in-box{width:100%;margin:0 -2rem;z-index:1;justify-self:center;padding:1.5rem;border-radius:.5rem}.sign-in-box sm-input{text-align:left}.sign-in-box sm-panel{width:100%}.sign-in-box sm-tab-header{margin:0;background:0 0;align-self:flex-start}.sign-in-box sm-tab-header::part(tab-header){padding-bottom:.4rem;gap:1.5rem}.sign-in-box sm-tab::part(tab){padding:.4rem 0}.sign-in-box sm-tab-panels{margin-top:1.5rem}.sign-in-box form{width:100%}.sign-in-box h2{margin-bottom:.5rem}.sign-in-box h4{margin-bottom:1.5rem}.sign-in-box h5{opacity:.8}.sign-in-box .copy-row h4{max-width:34ch}.sign-in-box .copy-row:not(:last-of-type){margin-bottom:1rem}.sign-in-box button{width:auto;margin-top:1rem;padding:.6rem 1.6rem}.sign-in-box p{max-width:35ch;margin-top:.5rem;margin-bottom:1.5rem}.sign-in-box #credentials_section{border-top:1px rgba(var(--text-color),.2) solid;margin-top:1rem;padding-top:1.5rem;animation:slide-down .3s forwards}.sign-in-box #sign_in_with{margin-top:2rem}@keyframes slide-down{from{transform:translateY(-1rem)}to{transform:none}}#loading_page{height:100vh;display:grid;place-content:center;justify-items:center}#loading_page svg{z-index:1;transform-origin:bottom;height:6rem;width:6rem;animation:bounce .5s infinite alternate ease-in}#loading_page .shadow{margin-top:-1rem;width:5rem;height:2rem;background:rgba(var(--text-color),.1);border-radius:50%;animation:scale .5s infinite alternate ease-in;margin-left:1rem}#loading_page h4{margin-top:2rem}@keyframes bounce{0%{transform:scaleY(1) translateY(-4rem)}90%{transform:scaleY(1) translateY(0)}100%{transform:scaleY(.8)}}@keyframes scale{0%{transform:scale(.5)}90%{transform:scale(1.05)}100%{transform:scale(1)}}.initial{justify-content:center;font-size:1.2rem;width:2.5rem;height:2.5rem;color:#fff;box-shadow:0 .1rem .1rem rgba(0,0,0,.06);border-radius:2rem;text-transform:uppercase}.contact{display:grid;gap:0 1rem;padding:.8rem 1.5rem;align-items:center;min-height:max-content}.contact.chat{grid-template-columns:auto 1fr auto;grid-template-areas:"dp . menu" "dp . ."}.contact:not(.chat){grid-template-columns:auto 1fr;grid-template-areas:"dp ."}.contact:focus{background:rgba(var(--text-color),.06);outline:0}.contact .initial{grid-area:dp}.contact .name{font-size:1rem;color:rgba(var(--text-color),.8)}.contact .last-message{grid-column:2/4;overflow:hidden;color:rgba(var(--text-color),.9)}.contact .time{font-weight:400;opacity:.8;grid-area:menu;align-self:flex-start}#contact_details_popup>.flex:first-of-type{margin:1rem 0}#contact_details_popup>.flex:first-of-type .flex .icon{height:2.6rem;width:2.6rem;padding:.85rem;cursor:pointer;stroke-width:8}#contact_details_popup>.flex:first-of-type .flex .icon:hover{background:rgba(var(--text-color),.06)}#contact_details_popup h5{font-weight:500;opacity:.8}#contact_details_popup .copy-row{margin-bottom:1.5rem}#contact_details_popup .copy-row h4{font-weight:400}#contact_details_popup #contact_initial{height:3.6rem;width:3.6rem;font-size:1.6rem;border-radius:4rem;margin-bottom:1rem}#contact_details_popup #contact_name{border-radius:.5rem;max-width:30ch;padding:.6rem 1.2rem}#contact_details_popup #contact_name:focus{outline:0;background:rgba(var(--text-color),.1)}#warn_no_encryption,.date-card{padding:.4rem .8rem;background:rgba(var(--text-color),.1);font-weight:500;border-radius:.5rem;color:rgba(var(--text-color),.8);margin:1rem 0;justify-self:center;align-self:flex-start}.date-card{align-self:center}.contact.unread .initial::before,.mail-card.unread::before{content:"";position:absolute;padding:.4rem;border-radius:1rem;top:0;left:0;background:var(--accent-color)}.mail,.mail-card{position:relative}.contact.unread h4,.contact.unread h5,.contact.unread p,.mail-card.unread h4,.mail-card.unread h5,.mail-card.unread p{font-weight:700}.mail-card{display:flex;flex-direction:column;padding:1rem 1.5rem}.mail-card .sender{color:rgba(var(--text-color),.9);font-weight:500;overflow:hidden;margin-right:1rem}.mail-card .date{margin-left:auto;font-weight:500;white-space:nowrap}.mail-card .subject{font-size:1em;margin-top:.5rem;font-weight:500}.mail-card .description{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-size:.9em;margin-top:.2rem;color:rgba(var(--text-color),.8)}#chat .message .message-body,.mail .mail-content,.mail .mail-subject{overflow-wrap:break-word;word-wrap:break-word}@keyframes slide{from{opacity:0;transform:translateX(-1rem)}to{opacity:1;transform:none}}#mail_container{width:100%}.mail:not(:first-of-type){margin-top:2rem;padding-inline-start:1rem}.mail:not(:first-of-type)::before{content:"";position:absolute;left:0;top:0;width:.2rem;height:100%;background:rgba(var(--text-color),.2)}.mail header{align-self:start;margin-bottom:1rem;padding-bottom:.5rem;border-bottom:solid 1px rgba(var(--text-color),.2)}.mail header h4{font-weight:500}.mail header .flo-id{font-weight:400;max-width:90%}.mail .mail-subject{margin-bottom:.4em}.mail .mail-content{height:max-content;max-width:60ch;white-space:pre-wrap}.logo-section{display:grid;grid-template-columns:auto 1fr}#main_navbar{position:fixed;flex-direction:column;bottom:0;top:0;padding:0;width:max(16rem,60vw);background:rgba(var(--foreground-color),1)}#main_navbar .logo-section{margin:1rem 0 1.5rem;padding:0 1rem}#main_navbar .active{background:var(--accent-color)}#main_navbar .active .icon{stroke:#fff}#main_navbar .active .label{color:#fff}#main_navbar .label{font-weight:500;font-size:.9rem}#main_navbar .navbar-item{height:auto;justify-content:flex-start;flex-direction:row;flex:none;padding:1rem 1.2rem}#main_navbar .navbar-item .icon{margin-right:.8rem;height:1.2rem;width:1.2rem}#main_navbar .navbar-item:last-of-type{margin-top:auto}#main_navbar .navbar-item.badge::after{right:0;top:0;position:absolute;content:attr(data-notifications);display:flex;justify-content:center;align-items:center;padding:.4rem;line-height:0;height:calc(1em + .4rem);background:#00C853;color:rgba(var(--foreground-color),1);border-radius:2rem;transition:transform .3s}#contacts #all_contacts,#mail_contact_list{position:absolute;background:rgba(var(--foreground-color),1);width:100%;z-index:1}#main_navbar .navbar-item.badge.active::after,#main_navbar .navbar-item.badge[data-notifications=""]::after,#main_navbar .navbar-item.badge[data-notifications="0"]::after{transform:scale(0)}#auto_complete_contact{position:relative;justify-content:flex-start;padding-bottom:0}#mail_contact_list{max-height:40vh;overflow-y:auto;top:100%;border-radius:.4rem;box-shadow:0 .1rem .1rem rgba(0,0,0,.1),0 .2rem .5rem rgba(0,0,0,.16)}#mail_contact_list .contact{grid-template-columns:auto 1fr;grid-template-areas:"dp ." "dp ."}#mail_contact_list sm-menu{display:none}#contacts{position:relative}#contacts #all_contacts{top:0;bottom:0;left:0;right:0;height:100%;padding-bottom:1.5rem;transition:transform .3s;transform:translateX(-100%)}#contacts #all_contacts .header{padding-bottom:1rem}#selected_contacts{padding:1.5rem;background:rgba(var(--text-color),.06)}#selected_contacts h4{font-weight:500;font-size:1rem}#selected_contacts sm-button{margin-bottom:0}#contacts,#mails{position:relative;grid-template-rows:max-content 1fr}#contacts,#mails,#settings_page{height:100vh;overflow-y:hidden}#contacts .header,#mails .header,#settings_page .header{background:rgba(var(--text-color),.06);padding:1rem 1.5rem 0;position:relative;gap:.5rem}#contacts .header sm-tab::part(tab),#mails .header sm-tab::part(tab),#settings_page .header sm-tab::part(tab){padding:.8rem 1rem}#contacts .header sm-input,#mails .header sm-input,#settings_page .header sm-input{margin:0;width:100%}#contacts .header sm-input .icon,#mails .header sm-input .icon,#settings_page .header sm-input .icon{stroke:rgba(var(--text-color),.5);height:.9rem;width:.9rem}#contacts .header sm-input::part(input),#mails .header sm-input::part(input),#settings_page .header sm-input::part(input){border-radius:3rem;padding:.5rem 1rem}#contacts .header h4,#mails .header h4,#settings_page .header h4{text-transform:capitalize}#contacts .header .icon,#mails .header .icon,#settings_page .header .icon{-webkit-tap-highlight-color:transparent}#contacts .header .flex .hamburger-menu-button,#mails .header .flex .hamburger-menu-button,#settings_page .header .flex .hamburger-menu-button{-webkit-tap-highlight-color:transparent;margin-right:1rem}#contacts .header .flex h4,#mails .header .flex h4,#settings_page .header .flex h4{flex:1}#contacts .header .flex .icon,#mails .header .flex .icon,#settings_page .header .flex .icon{height:2.2rem;width:2.2rem;padding:.6rem;margin-left:-.4rem;cursor:pointer}#contacts .header .flex sm-menu,#mails .header .flex sm-menu,#settings_page .header .flex sm-menu{margin-right:-.7rem}#contacts .header sm-button,#mails .header sm-button,#settings_page .header sm-button{margin:0 0 0 auto}#contacts .header sm-button .icon,#mails .header sm-button .icon,#settings_page .header sm-button .icon{height:.9rem;width:.9rem;align-self:center;stroke-width:8;margin-left:0;margin-right:.5rem}#chat_page{overflow-y:hidden}#chat{height:100vh}#chat header{padding:.5rem 1rem}#chat header .back-button{padding:.1rem;stroke-width:8;margin-right:.5rem;stroke:rgba(var(--text-color),.8)}#chat header .initial{cursor:pointer;margin-right:1rem}#chat header h4{font-weight:500;font-size:.9rem}#chat #scroll_to_bottom{position:fixed;right:0;bottom:4rem;width:2.6rem;height:2.6rem;padding:.9rem;border-radius:4rem;z-index:1;margin:1.5rem;stroke-width:8;cursor:pointer;transform:scale(0);transition:transform .3s}#chat footer #toggle_emoji{align-self:center;padding:.6rem;width:2.6rem;height:2.6rem;border-radius:2rem;cursor:pointer}#chat footer #toggle_emoji path{fill:rgba(var(--text-color),.5)}#chat footer #toggle_emoji.active path{fill:var(--accent-color)}#chat footer .flex{align-items:flex-end;padding:1rem 1rem 1rem .4rem}#chat footer sm-textarea::part(textarea){background:rgba(var(--text-color),.1);padding-right:3rem;border-radius:2rem}#chat #send_message_button{position:absolute;right:1.5rem;transform:scale(0);opacity:0;pointer-events:none;z-index:1;align-self:center;height:2.4rem;width:2.4rem;padding:.5rem;cursor:pointer;stroke:none;fill:rgba(var(--text-color),.4);margin-left:1rem;transition:.3s}#chat #send_message_button.active{opacity:1;fill:var(--accent-color);transform:none;pointer-events:all}#chat #type_message{margin:0}#chat .message{position:relative;display:grid;grid-auto-flow:column;align-items:center;gap:.5rem;width:100%;font-size:.9rem;max-width:max-content;margin-bottom:.2rem;margin-top:.8rem}#chat .message .message-body{display:inline-flex;align-items:center;flex-wrap:wrap;word-break:break-all;word-break:break-word;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;white-space:pre-wrap;box-shadow:0 1px .1rem rgba(0,0,0,.16);padding:.6em 1em;line-height:1.5}#chat .message .message-body a{color:inherit}#chat .message .message-body .text-emoji{align-self:center;font-size:1.4em;letter-spacing:0ch}#chat .message .time{white-space:nowrap;font-size:.8em;opacity:.8}#chat .sent{margin-left:auto}#chat .sent::after{content:"";position:absolute;left:100%;top:0;width:0;height:0;border-style:solid;border-width:.5em .3em 0 0;border-color:var(--accent-color) transparent transparent}#chat .sent .message-body{background:var(--accent-color);color:#f0f0f0;border-radius:1.5em 0 1.5em 1.5em}#chat .sent .time{grid-column:1}#chat .received::after{content:"";position:absolute;left:-.5em;top:0;width:0;height:0;border-style:solid;border-width:0 .5em .5em 0;border-color:transparent rgba(var(--text-color),.1) transparent transparent}#chat .received .message-body{background:rgba(var(--text-color),.1);border-radius:0 1.5em 1.5em}#chat .received+.received,#chat .sent+.sent{margin-top:0}#chat .received+.received::after,#chat .sent+.sent::after{display:none}#chat .received+.received .message-body,#chat .sent+.sent .message-body{border-radius:1.5em}#chat .unconfirmed{opacity:.7;transform-origin:right;animation:slide-up .3s forwards}@keyframes slide-up{from{transform:translateY(-2rem)}to{transform:none}}.big-emoji::after{display:none}.big-emoji .message-body{background:0 0!important;box-shadow:none!important;padding:0!important;font-size:2.6rem}#chat_container{flex:1;padding:0 1rem}#emoji_picker{display:grid;gap:1rem;background:rgba(var(--text-color),.06);border-radius:1rem;margin:0 1rem;box-shadow:0 .2rem .8rem rgba(0,0,0,.3);overflow-y:auto;max-height:30vh}#emoji_picker section{display:grid;grid-template-columns:repeat(auto-fill,minmax(3.6rem,1fr));gap:.5rem;padding:0 1rem;width:100%}#emoji_picker .section-header{grid-column:1/-1;position:sticky;top:0;background:linear-gradient(rgba(var(--text-color),.06),rgba(var(--text-color),.06)),rgba(var(--foreground-color),1);padding:1rem 0;z-index:1}.emoji{font-size:1.6rem;cursor:pointer;padding:.4rem;border-radius:.6rem;user-select:none;text-align:center}#new_conversation,#no_mails{height:100%;justify-content:center;text-align:center;padding:1.5rem}#new_conversation p,#no_mails p{margin-top:.8rem}#no_mails .new-conversation{height:7rem;margin-bottom:1rem}.new-conversation{height:8rem;width:8rem;align-self:center;stroke-width:16;stroke:rgba(var(--text-color),.4)}#chat_container,#contacts_container,#dm_container,#inbox_mail_container,#mail,#sent_mail_container{width:100%;flex-direction:column;height:100%;overflow-y:auto}#contacts_container,#dm_container,#inbox_mail_container,#sent_mail_container{height:auto;min-height:100%}#dm_container:empty{display:none}#dm_container:not(:empty)~.empty-state{display:none}#dm_container,#inbox_mail_container,#sent_mail_container{padding-bottom:5rem}sm-tab-panels{overflow:hidden auto}sm-panel{width:100%;overflow-y:auto}#chat,#mail{background:rgba(var(--foreground-color),1)}#mail{height:100vh;padding:0 1.5rem;align-items:flex-start}#mail .flex{margin-top:1rem}#mail .flex sm-button:first-of-type{margin-right:.5rem}#compose_mail_popup sm-input{margin-bottom:1rem}.sidebar-item{display:flex;align-items:center;padding:1rem 1.5rem;text-transform:capitalize;font-weight:500;opacity:.9}.sidebar-item .icon{margin-right:1em;width:1em}.back{padding:.7rem;height:2.4rem;width:2.4rem;margin-left:-.5rem;cursor:pointer;stroke-width:8;opacity:.8;-webkit-tap-highlight-color:transparent}.back:hover{opacity:1}#settings_page #settings_sidebar header{padding:1rem 1.5rem}#settings_page .flex sm-button{margin:0;margin-left:1rem}#settings_page sm-switch{padding-left:1rem}#settings_page sm-button{width:100%}#settings_page #settings_title{text-transform:capitalize}#settings_page #settings_sidebar{height:100%}#settings_page #settings_panel{padding:0 1.5rem}#settings_page section{max-width:50ch;display:grid;gap:.3rem}#settings_page section:not(:last-of-type){margin-bottom:1.5rem}#settings_page section.setting-toggle{grid-template-columns:1fr auto}#settings_page section.setting-toggle sm-switch{grid-column:2;grid-row:1/3}#settings_page section.setting-toggle>h4,#settings_page section.setting-toggle>p{grid-column:1}#settings_page #sign_out::part(button){color:var(--error-color)}@media screen and (max-width:640px){#chat header,#main_navbar .logo-section{padding:1rem}.hide-on-mobile{position:fixed;max-height:0;opacity:0;pointer-events:none}#landing{grid-template-areas:"illustration" ".";height:100%}#sing_in{max-height:90vh}#landing_illustration{grid-area:illustration}#main_navbar{transform:translateX(-100%);transition:transform .3s;z-index:4;box-shadow:0 0 1rem rgba(0,0,0,.3)}#navbar_backdrop{position:fixed;left:0;right:0;top:0;bottom:0;background:rgba(0,0,0,.3);z-index:2;transition:transform .3s,opacity .3s}#contact_container,#dm_container{gap:.5rem}#chat header .initial{width:2rem;height:2rem}#chat .message{width:fit-content;max-width:90%}#settings_page{overflow-x:hidden}#settings_page #settings_panel header{position:sticky;top:0;padding:1rem 0;margin-bottom:.5rem;background:rgba(var(--foreground-color),1)}}@media only screen and (min-width:640px){::-webkit-scrollbar{width:.5rem}::-webkit-scrollbar-thumb{background:rgba(var(--text-color),.3);border-radius:1rem}::-webkit-scrollbar-thumb:hover{background:rgba(var(--text-color),.5)}.hide-on-desktop{display:none!important}.page{padding-bottom:0}.fab{position:absolute}.logo-section{padding:2rem 3rem 0;margin:.5rem 0}sm-popup::part(popup){width:24rem;min-width:24rem}#landing{height:calc(100vh - 8rem);align-items:center;gap:4vw;grid-template-columns:1fr 1fr;padding:0 4vw}#landing .left h4{color:var(--accent-color)}#sign_in_popup .popup-header{padding-top:1.5rem}#main_navbar{position:relative;width:auto;padding-bottom:.5rem;background:rgba(var(--text-color),.06)}#main_navbar .logo-section{display:flex;justify-content:center;margin:1.5rem 0}#main_navbar .logo-section .main-logo{margin:0}#main_navbar .navbar-item{margin:0 .5rem;border-radius:.5rem}#main_navbar .navbar-item .icon{margin-right:0}#main_navbar .label{display:none}#add_contact_popup::part(popup){min-width:24rem}#compose_mail_popup::part(popup),#reply_mail_popup::part(popup){min-width:36rem}#main{width:100vw;height:100vh;grid-template-columns:auto 1fr}#emoji_picker{max-height:18rem}#chat .message .message-body{max-width:65ch}#chat_page,#mail_page{grid-template-columns:20rem 1fr;box-shadow:0 0 1rem rgba(0,0,0,.1);z-index:1}#settings_page{display:grid;height:100vh;box-shadow:0 0 1rem rgba(0,0,0,.1);grid-template-columns:14rem 1fr}#settings_page sm-button{width:max-content}#settings_page #settings_panel{padding:1.5rem}#settings_page .active{background:rgba(var(--text-color),.1)}.contact.active,.mail-card.active{background:rgba(var(--text-color),.06)}.card{display:inline-flex;width:auto}#settings_panel{overflow-y:auto;max-height:100vh}}@media only screen and (min-width:1280px){#landing{gap:4vw;padding:0 8vw}#landing .title-font{font-size:3rem}#chat_page,#mail_page{grid-template-columns:21rem 1fr}#chat header{padding:.5rem 1.5rem}#chat #chat_container{padding:1rem 5rem}}@media (hover:hover){.contact:hover,.mail-card:hover,.navbar-item:hover{background:rgba(var(--text-color),.06);cursor:pointer}.contact sm-menu{opacity:0;transition:opacity .3s}.contact:hover sm-menu,sm-menu:focus-within{opacity:1}.emoji:hover{background:rgba(var(--text-color),.1)}} \ No newline at end of file +#landing_page,.sign-in-box,body,body #scroll_to_bottom{background:rgba(var(--foreground-color),1)}p,textarea{line-height:1.6}.align-center,.popup-header{align-items:center}#chat #send_message_button,.hide{opacity:0;pointer-events:none}.contact .last-message,.copy-row .copy,.mail-card .sender,.text-overflow{text-overflow:ellipsis;white-space:nowrap}*,::after,::before{padding:0;margin:0;box-sizing:border-box;font-family:Roboto,sans-serif}:root{scroll-behavior:smooth;font-size:clamp(1rem,1.2vmax,3rem)}body,html{height:100%}body{--accent-color:#5b00d3;--secondary-color:#ffac2e;--text-color:17,17,17;--text-color-light:100,100,100;--foreground-color:255,255,255;--background-color:#efefef;--error-color:red;color:rgba(var(--text-color),1)}body #scroll_to_bottom{box-shadow:0 .3rem .4rem rgba(0,0,0,.2)}body[data-theme=dark]{--accent-color:#923eff;--secondary-color:#d60739;--text-color:240,240,240;--text-color-light:170,170,170;--foreground-color:20,20,20}body[data-theme=dark] .initial{color:rgba(var(--text-color),1)!important;box-shadow:0 .1rem .1rem rgba(0,0,0,.16)}body[data-theme=dark] .message,h1,h2,h3,h4,h5,textarea{color:rgba(var(--text-color),1)}body[data-theme=dark] #scroll_to_bottom{background:linear-gradient(rgba(var(--text-color),.1),rgba(var(--text-color),.1)),rgba(var(--foreground-color),1);box-shadow:0 .4rem .4rem rgba(0,0,0,.3)}h1{font-size:3rem}h2{font-size:2rem}h3{font-size:1.5rem}h4{font-size:1.1rem}h5{font-size:.8rem}h1,h2,h3,h4,h5{font-weight:600}textarea{background:rgba(var(--text-color),.06);border:none;border-radius:.3rem;width:100%;padding:1rem;font-size:1rem;resize:none}textarea:focus{outline:0;box-shadow:0 0 0 .1rem var(--accent-color)}strong{font-weight:500}.flex{display:flex}.grid{display:grid}.grid-2{grid-template-columns:auto auto;gap:1em}.justify-right{margin-left:auto}.direction-column{flex-direction:column}.rest{flex:1}.hide-completely{display:none!important}.no-transformations{transform:none!important}.breakable{overflow-wrap:break-word}.text-overflow{overflow:hidden}.sticky{position:sticky;top:1rem}.light-text{color:rgba(var(--text-color-light),1)}.accent-color{color:var(--accent-color)}.secondary-color{color:var(--secondary-color)}.fab{filter:drop-shadow(0 .4rem .3rem rgba(0, 0, 0, .2));margin:1.5rem;position:fixed;right:0;bottom:0;z-index:1}.fab::part(button){padding:.9rem 1.6rem}.fab .icon{margin-left:0!important;margin-right:.5rem;height:.9rem!important;stroke-width:8!important}a:any-link{word-wrap:break-word;color:var(--accent-color);font-weight:500}.solid-background{background:var(--background-color)!important}.normal-weight{font-weight:400}.icon{fill:none;stroke-width:6;stroke:rgba(var(--text-color),1);height:1.2rem;width:1.2rem;overflow:visible;stroke-linecap:round;stroke-linejoin:round}span.ripple{position:absolute;border-radius:50%;transform:scale(0);background:rgba(var(--text-color),.2);pointer-events:none}#landing_illustration,.contact,.initial,.interact,.logo-section{position:relative}.interact{overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:transparent}sm-popup sm-input+sm-input{margin-top:1rem}.popup-header{padding:.5rem 1.5rem 0;display:flex;width:100%}#landing,.copy-row,.logo-section{align-items:center}.popup-header .icon{padding:.7rem;height:2.4rem;width:2.4rem;stroke-width:8;transform:translateX(-.5rem);cursor:pointer;-webkit-tap-highlight-color:transparent}.popup-header .back{transform:none}.popup-header button,.popup-header sm-button{width:auto;margin-left:auto}.copy-row{display:grid;grid-template-columns:1fr auto;gap:.5rem;width:auto}.copy-row .icon{cursor:pointer;padding:.4rem;height:1.8rem;width:1.8rem}.copy-row .copy{overflow:hidden}.copy-row h4{margin-bottom:0!important}#confirmation_popup,#prompt_popup{flex-direction:column}#confirmation_popup h4,#prompt_popup h4{font-weight:500;margin-bottom:.5rem}#confirmation_popup sm-button,#prompt_popup sm-button{margin:0}#confirmation_popup .flex,#prompt_popup .flex{padding:0;margin-top:2rem}#confirmation_popup .flex sm-button:first-of-type,#prompt_popup .flex sm-button:first-of-type{margin-right:.6rem;margin-left:auto}.card,sm-button{margin:1rem 0}.page{align-items:flex-start;width:100%;height:100%}.card{display:flex;flex-direction:column}sm-button .icon{margin-right:.4rem}sm-button[variant=primary]{--foreground-color:255,255,255}sm-button[variant=primary] .icon{align-self:center;height:1rem;width:1rem;margin-left:.8rem;stroke-width:6;stroke:#fff}.logo-section{height:max-content;margin:.5rem 0}.logo-section h5{font-size:1.1rem!important;font-weight:500}.logo-section .main-logo{height:1.4rem;margin-right:.4rem;fill:rgba(var(--text-color),.8);stroke:none}.logo-section img{width:2rem;margin-right:.5rem}.select-file input[type=file]{display:none}#landing{display:grid;border-radius:.6rem;width:100%;padding:0 1.5rem;height:100%}#landing .logo-section{padding:1.5rem;display:flex}#landing .title-font{line-height:1.2;font-weight:700;font-size:2.5rem}#landing .left h3,#landing .left h4,#landing .left p,.contact .last-message,.contact .name,.sign-in-box h3,.sign-in-box h4,.sign-in-box h5{font-weight:500}#landing .left{display:grid;flex-direction:column;padding-bottom:1.5rem;z-index:1}#landing .left h4{color:rgba(var(--foreground-color),1)}#landing .left sm-button{margin:1.5rem 0 2rem;width:max-content}#landing .left h3{margin-bottom:1rem}.logo-section{padding:1.5rem}#landing_illustration{width:100%}#sign_in_popup::part(popup-body){padding:0}.sign-in-box{width:100%;margin:0 -2rem;z-index:1;justify-self:center;padding:1.5rem;border-radius:.5rem}.sign-in-box sm-input{text-align:left}.sign-in-box sm-panel{width:100%}.sign-in-box sm-tab-header{margin:0;background:0 0;align-self:flex-start}.sign-in-box sm-tab-header::part(tab-header){padding-bottom:.4rem;gap:1.5rem}.sign-in-box sm-tab::part(tab){padding:.4rem 0}.sign-in-box sm-tab-panels{margin-top:1.5rem}.sign-in-box form{width:100%}.sign-in-box h2{margin-bottom:.5rem}.sign-in-box h4{margin-bottom:1.5rem}.sign-in-box h5{opacity:.8}.sign-in-box .copy-row h4{max-width:34ch}.sign-in-box .copy-row:not(:last-of-type){margin-bottom:1rem}.sign-in-box button{width:auto;margin-top:1rem;padding:.6rem 1.6rem}.sign-in-box p{max-width:35ch;margin-top:.5rem;margin-bottom:1.5rem}.sign-in-box #credentials_section{border-top:1px rgba(var(--text-color),.2) solid;margin-top:1rem;padding-top:1.5rem;animation:slide-down .3s forwards}.sign-in-box #sign_in_with{margin-top:2rem}@keyframes slide-down{from{transform:translateY(-1rem)}to{transform:none}}#loading_page{height:100vh;display:grid;place-content:center;justify-items:center}#loading_page svg{z-index:1;transform-origin:bottom;height:6rem;width:6rem;animation:bounce .5s infinite alternate ease-in}#loading_page .shadow{margin-top:-1rem;width:5rem;height:2rem;background:rgba(var(--text-color),.1);border-radius:50%;animation:scale .5s infinite alternate ease-in;margin-left:1rem}#loading_page h4{margin-top:2rem}@keyframes bounce{0%{transform:scaleY(1) translateY(-4rem)}90%{transform:scaleY(1) translateY(0)}100%{transform:scaleY(.8)}}@keyframes scale{0%{transform:scale(.5)}90%{transform:scale(1.05)}100%{transform:scale(1)}}.initial{justify-content:center;font-size:1.2rem;width:2.5rem;height:2.5rem;color:#fff;box-shadow:0 .1rem .1rem rgba(0,0,0,.06);border-radius:2rem;text-transform:uppercase}.contact{display:grid;gap:0 1rem;padding:.8rem 1.5rem;align-items:center;flex-shrink:0}.contact.chat{grid-template-columns:auto 1fr auto;grid-template-areas:"dp . menu" "dp . ."}.contact:not(.chat){grid-template-columns:auto 1fr;grid-template-areas:"dp ."}.contact:focus{background:rgba(var(--text-color),.06);outline:0}.contact .initial{grid-area:dp}.contact .name{font-size:1rem;color:rgba(var(--text-color),.8)}.contact .last-message{grid-column:2/4;overflow:hidden;color:rgba(var(--text-color),.9)}.contact .time{font-weight:400;opacity:.8;grid-area:menu;align-self:flex-start}#contact_details_popup>.flex:first-of-type{margin:1rem 0}#contact_details_popup>.flex:first-of-type .flex .icon{height:2.6rem;width:2.6rem;padding:.85rem;cursor:pointer;stroke-width:8}#contact_details_popup>.flex:first-of-type .flex .icon:hover{background:rgba(var(--text-color),.06)}#contact_details_popup h5{font-weight:500;opacity:.8}#contact_details_popup .copy-row{margin-bottom:1.5rem}#contact_details_popup .copy-row h4{font-weight:400}#contact_details_popup #contact_initial{height:3.6rem;width:3.6rem;font-size:1.6rem;border-radius:4rem;margin-bottom:1rem}#contact_details_popup #contact_name{border-radius:.5rem;max-width:30ch;padding:.6rem 1.2rem}#contact_details_popup #contact_name:focus{outline:0;background:rgba(var(--text-color),.1)}#warn_no_encryption,.date-card{padding:.4rem .8rem;background:rgba(var(--text-color),.1);font-weight:500;border-radius:.5rem;color:rgba(var(--text-color),.8);margin:1rem 0;justify-self:center;align-self:center}.contact.unread .initial::before,.mail-card.unread::before{content:"";position:absolute;padding:.4rem;border-radius:1rem;top:0;left:0;background:var(--accent-color)}.mail,.mail-card{position:relative}.contact.unread .time,.mail-card.unread .time{color:var(--accent-color)}.contact.unread h4,.contact.unread h5,.contact.unread p,.mail-card.unread h4,.mail-card.unread h5,.mail-card.unread p{font-weight:700}.mail-card{display:flex;flex-direction:column;padding:1rem 1.5rem}.mail-card .sender{color:rgba(var(--text-color),.9);font-weight:500;overflow:hidden;margin-right:1rem}.mail-card .date{margin-left:auto;font-weight:500;white-space:nowrap}.mail-card .subject{font-size:1em;margin-top:.5rem;font-weight:500}.mail-card .description{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-size:.9em;margin-top:.2rem;color:rgba(var(--text-color),.8)}#chat .message .message-body,.mail .mail-content,.mail .mail-subject{overflow-wrap:break-word;word-wrap:break-word}@keyframes slide{from{opacity:0;transform:translateX(-1rem)}to{opacity:1;transform:none}}#mail_container{width:100%}.mail:not(:first-of-type){margin-top:2rem;padding-inline-start:1rem}.mail:not(:first-of-type)::before{content:"";position:absolute;left:0;top:0;width:.2rem;height:100%;background:rgba(var(--text-color),.2)}.mail header{align-self:start;margin-bottom:1rem;padding-bottom:.5rem;border-bottom:solid 1px rgba(var(--text-color),.2)}.mail header h4{font-weight:500}.mail header .flo-id{font-weight:400;max-width:90%}.mail .mail-subject{margin-bottom:.4em}.mail .mail-content{height:max-content;max-width:60ch;white-space:pre-wrap}.logo-section{display:grid;grid-template-columns:auto 1fr}#main_navbar{position:fixed;flex-direction:column;bottom:0;top:0;padding:0;width:max(16rem,60vw);background:rgba(var(--foreground-color),1)}#main_navbar .logo-section{margin:1rem 0 1.5rem;padding:0 1rem}#main_navbar .active{background:var(--accent-color)}#main_navbar .active .icon{stroke:#fff}#main_navbar .active .label{color:#fff}#main_navbar .label{font-weight:500;font-size:.9rem}#main_navbar .navbar-item{height:auto;justify-content:flex-start;flex-direction:row;flex:none;padding:1rem 1.2rem}#main_navbar .navbar-item .icon{margin-right:.8rem;height:1.2rem;width:1.2rem}#main_navbar .navbar-item:last-of-type{margin-top:auto}#main_navbar .navbar-item.badge::after{right:0;top:0;position:absolute;content:attr(data-notifications);display:flex;justify-content:center;align-items:center;padding:.4rem;line-height:0;height:calc(1em + .4rem);background:#00C853;color:rgba(var(--foreground-color),1);border-radius:2rem;transition:transform .3s}#contacts #all_contacts,#mail_contact_list{background:rgba(var(--foreground-color),1);position:absolute;z-index:1}#main_navbar .navbar-item.badge.active::after,#main_navbar .navbar-item.badge[data-notifications=""]::after,#main_navbar .navbar-item.badge[data-notifications="0"]::after{transform:scale(0)}#auto_complete_contact{position:relative;justify-content:flex-start;padding-bottom:0}#mail_contact_list{max-height:40vh;overflow-y:auto;top:100%;border-radius:.4rem;box-shadow:0 .1rem .1rem rgba(0,0,0,.1),0 .2rem .5rem rgba(0,0,0,.16);width:100%}#mail_contact_list .contact{grid-template-columns:auto 1fr;grid-template-areas:"dp ." "dp ."}#mail_contact_list sm-menu{display:none}#contacts{position:relative}#contacts #all_contacts{top:0;bottom:0;left:0;right:0;padding-bottom:1.5rem;transition:transform .3s;transform:translateX(-110%)}#contacts #all_contacts .header{padding-bottom:1rem}#contacts #contacts_container{height:calc(100vh - 7.3rem)}#selected_contacts{padding:1.5rem;background:rgba(var(--text-color),.06)}#selected_contacts h4{font-weight:500;font-size:1rem}#selected_contacts sm-button{margin-bottom:0}#selected_contacts_container{display:grid;grid-template-columns:repeat(auto-fill,minmax(6rem,1fr));gap:1rem}#contacts,#mails{position:relative;grid-template-rows:max-content 1fr}#contacts,#mails,#settings_page{height:100vh;overflow-y:hidden}#contacts .header,#mails .header,#settings_page .header{background:rgba(var(--text-color),.06);padding:1rem 1.5rem 0;position:relative;gap:.5rem}#contacts .header sm-tab::part(tab),#mails .header sm-tab::part(tab),#settings_page .header sm-tab::part(tab){padding:.8rem 1rem}#contacts .header .expanding-search,#mails .header .expanding-search,#settings_page .header .expanding-search{position:absolute;width:100%;padding:.7rem 1.5rem;background:linear-gradient(rgba(var(--text-color),.06),rgba(var(--text-color),.06)),rgba(var(--foreground-color),1);clip-path:circle(0 at calc(100% - 4rem) center);transition:clip-path .3s}#contacts .header .expanding-search.expand,#mails .header .expanding-search.expand,#settings_page .header .expanding-search.expand{clip-path:circle(100%)}#contacts .header sm-input,#mails .header sm-input,#settings_page .header sm-input{margin:0;width:100%}#contacts .header sm-input .icon,#mails .header sm-input .icon,#settings_page .header sm-input .icon{stroke:rgba(var(--text-color),.5);height:.9rem;width:.9rem}#contacts .header sm-input::part(input),#mails .header sm-input::part(input),#settings_page .header sm-input::part(input){border-radius:3rem;padding:.3rem .8rem}#contacts .header h4,#mails .header h4,#settings_page .header h4{text-transform:capitalize}#contacts .header .icon,#mails .header .icon,#settings_page .header .icon{-webkit-tap-highlight-color:transparent}#contacts .header .flex .hamburger-menu-button,#mails .header .flex .hamburger-menu-button,#settings_page .header .flex .hamburger-menu-button{-webkit-tap-highlight-color:transparent;margin-right:1rem}#contacts .header .flex h4,#mails .header .flex h4,#settings_page .header .flex h4{flex:1}#contacts .header .flex .icon,#mails .header .flex .icon,#settings_page .header .flex .icon{height:2.2rem;width:2.2rem;padding:.6rem;margin-left:-.4rem;cursor:pointer}#contacts .header .flex sm-menu,#mails .header .flex sm-menu,#settings_page .header .flex sm-menu{margin-right:-.7rem}#contacts .header sm-button,#mails .header sm-button,#settings_page .header sm-button{margin:0 0 0 auto}#contacts .header sm-button .icon,#mails .header sm-button .icon,#settings_page .header sm-button .icon{height:.9rem;width:.9rem;align-self:center;stroke-width:8;margin-left:0;margin-right:.5rem}#chat_page{overflow-y:hidden}#chat{height:100vh}#chat header{padding:.5rem 1rem}#chat header .back-button{padding:.1rem;stroke-width:8;margin-right:.5rem;stroke:rgba(var(--text-color),.8)}#chat header .initial{cursor:pointer;margin-right:1rem}#chat header h4{font-weight:500;font-size:.9rem}#chat #scroll_to_bottom{position:fixed;right:0;bottom:4rem;width:2.6rem;height:2.6rem;padding:.9rem;border-radius:4rem;z-index:1;margin:1.5rem;stroke-width:8;cursor:pointer;transform:scale(0);transition:transform .3s}#chat footer #toggle_emoji{align-self:center;padding:.6rem;width:2.6rem;height:2.6rem;border-radius:2rem;cursor:pointer}#chat footer #toggle_emoji path{fill:rgba(var(--text-color),.5)}#chat footer #toggle_emoji.active path{fill:var(--accent-color)}#chat footer .flex{align-items:flex-end;padding:1rem 1rem 1rem .4rem}#chat footer sm-textarea::part(textarea){background:rgba(var(--text-color),.1);padding-right:3rem;border-radius:2rem}#chat #send_message_button{position:absolute;right:1.5rem;transform:scale(0);z-index:1;align-self:center;height:2.4rem;width:2.4rem;padding:.5rem;cursor:pointer;stroke:none;fill:rgba(var(--text-color),.4);margin-left:1rem;transition:.3s}#chat #send_message_button.active{opacity:1;fill:var(--accent-color);transform:none;pointer-events:all}#chat #type_message{margin:0}#chat .message{position:relative;display:grid;grid-auto-flow:column;align-items:center;gap:.5rem;width:100%;font-size:.9rem;max-width:max-content;margin-bottom:.2rem;margin-top:.8rem}#chat .message .message-body{display:inline-flex;align-items:center;flex-wrap:wrap;word-break:break-all;word-break:break-word;-moz-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;white-space:pre-wrap;box-shadow:0 1px .1rem rgba(0,0,0,.16);padding:.6em 1em;line-height:1.5}#chat .message .message-body a{color:inherit}#chat .message .message-body .text-emoji{align-self:center;font-size:1.4em;letter-spacing:0ch}#chat .message .time{white-space:nowrap;font-size:.8em;opacity:.8}#chat .sent{margin-left:auto}#chat .sent::after{content:"";position:absolute;left:100%;top:0;width:0;height:0;border-style:solid;border-width:.5em .3em 0 0;border-color:var(--accent-color) transparent transparent}#chat .sent .message-body{background:var(--accent-color);color:#f0f0f0;border-radius:1.5em 0 1.5em 1.5em}#chat .sent .time{grid-column:1}#chat .received::after{content:"";position:absolute;left:-.5em;top:0;width:0;height:0;border-style:solid;border-width:0 .5em .5em 0;border-color:transparent rgba(var(--text-color),.1) transparent transparent}#chat .received .message-body{background:rgba(var(--text-color),.1);border-radius:0 1.5em 1.5em}#chat .received+.received,#chat .sent+.sent{margin-top:0}#chat .received+.received::after,#chat .sent+.sent::after{display:none}#chat .received+.received .message-body,#chat .sent+.sent .message-body{border-radius:1.5em}#chat .unconfirmed{opacity:.7;transform-origin:right;animation:slide-up .3s forwards}@keyframes slide-up{from{transform:translateY(-2rem)}to{transform:none}}.big-emoji::after{display:none}.big-emoji .message-body{background:0 0!important;box-shadow:none!important;padding:0!important;font-size:2.6rem}#chat_container{flex:1;padding:0 1rem}#emoji_picker{display:grid;gap:1rem;background:rgba(var(--text-color),.06);border-radius:1rem;margin:0 1rem;box-shadow:0 .2rem .8rem rgba(0,0,0,.3);overflow-y:auto;max-height:30vh}#emoji_picker section{display:grid;grid-template-columns:repeat(auto-fill,minmax(3.6rem,1fr));gap:.5rem;padding:0 1rem;width:100%}#emoji_picker .section-header{grid-column:1/-1;position:sticky;top:0;background:linear-gradient(rgba(var(--text-color),.06),rgba(var(--text-color),.06)),rgba(var(--foreground-color),1);padding:1rem 0;z-index:1}.emoji{font-size:1.6rem;cursor:pointer;padding:.4rem;border-radius:.6rem;user-select:none;text-align:center}#new_conversation,#no_mails{height:100%;justify-content:center;text-align:center;padding:1.5rem}#new_conversation p,#no_mails p{margin-top:.8rem}#no_mails .new-conversation{height:7rem;margin-bottom:1rem}.new-conversation{height:8rem;width:8rem;align-self:center;stroke-width:16;stroke:rgba(var(--text-color),.4)}#chat_container,#contacts_container,#dm_container,#inbox_mail_container,#mail,#sent_mail_container{width:100%;flex-direction:column;height:100%;overflow-y:auto}#dm_container:empty{display:none}#dm_container:not(:empty)~.empty-state{display:none}#dm_container,#inbox_mail_container,#sent_mail_container{padding-bottom:5rem}sm-tab-panels{overflow:hidden auto}sm-panel{width:100%;overflow-y:auto}#chat,#mail{background:rgba(var(--foreground-color),1)}#mail{height:100vh;padding:0 1.5rem;align-items:flex-start}#mail .flex{margin-top:1rem}#mail .flex sm-button:first-of-type{margin-right:.5rem}#compose_mail_popup sm-input{margin-bottom:1rem}.sidebar-item{display:flex;align-items:center;padding:1rem 1.5rem;text-transform:capitalize;font-weight:500;opacity:.9}.sidebar-item .icon{margin-right:1em;width:1em}.back{padding:.7rem;height:2.4rem;width:2.4rem;margin-left:-.5rem;cursor:pointer;stroke-width:8;opacity:.8;-webkit-tap-highlight-color:transparent}.back:hover{opacity:1}#settings_page #settings_sidebar header{padding:1rem 1.5rem}#settings_page .flex sm-button{margin:0;margin-left:1rem}#settings_page sm-switch{padding-left:1rem}#settings_page sm-button{width:100%}#settings_page #settings_title{text-transform:capitalize}#settings_page #settings_sidebar{height:100%}#settings_page #settings_panel{padding:0 1.5rem}#settings_page section{max-width:50ch;display:grid;gap:.3rem}#settings_page section:not(:last-of-type){margin-bottom:1.5rem}#settings_page section.setting-toggle{grid-template-columns:1fr auto}#settings_page section.setting-toggle sm-switch{grid-column:2;grid-row:1/3}#settings_page section.setting-toggle>h4,#settings_page section.setting-toggle>p{grid-column:1}#settings_page #sign_out::part(button){color:var(--error-color)}@media screen and (max-width:640px){#chat header,#main_navbar .logo-section{padding:1rem}.hide-on-mobile{position:fixed;max-height:0;opacity:0;pointer-events:none}#landing{grid-template-areas:"illustration" ".";height:100%}#sing_in{max-height:90vh}#landing_illustration{grid-area:illustration}#main_navbar{transform:translateX(-100%);transition:transform .3s;z-index:4;box-shadow:0 0 1rem rgba(0,0,0,.3)}#navbar_backdrop{position:fixed;left:0;right:0;top:0;bottom:0;background:rgba(0,0,0,.3);z-index:2;transition:transform .3s,opacity .3s}#contact_container,#dm_container{gap:.5rem}#chat header .initial{width:2rem;height:2rem}#chat .message{width:fit-content;max-width:90%}#settings_page{overflow-x:hidden}#settings_page #settings_panel header{position:sticky;top:0;padding:1rem 0;margin-bottom:.5rem;background:rgba(var(--foreground-color),1)}}@media only screen and (min-width:640px){::-webkit-scrollbar{width:.5rem}::-webkit-scrollbar-thumb{background:rgba(var(--text-color),.3);border-radius:1rem}::-webkit-scrollbar-thumb:hover{background:rgba(var(--text-color),.5)}.hide-on-desktop{display:none!important}.page{padding-bottom:0}.fab{position:absolute}.logo-section{padding:2rem 3rem 0;margin:.5rem 0}sm-popup::part(popup){width:24rem;min-width:24rem}#landing{height:calc(100vh - 8rem);align-items:center;gap:4vw;grid-template-columns:1fr 1fr;padding:0 4vw}#landing .left h4{color:var(--accent-color)}#sign_in_popup .popup-header{padding-top:1.5rem}#main_navbar{position:relative;width:auto;padding-bottom:.5rem;background:rgba(var(--text-color),.06)}#main_navbar .logo-section{display:flex;justify-content:center;margin:1.5rem 0}#main_navbar .logo-section .main-logo{margin:0}#main_navbar .navbar-item{margin:0 .5rem;border-radius:.5rem}#main_navbar .navbar-item .icon{margin-right:0}#main_navbar .label{display:none}#add_contact_popup::part(popup){min-width:24rem}#compose_mail_popup::part(popup),#reply_mail_popup::part(popup){min-width:36rem}#main{width:100vw;height:100vh;grid-template-columns:auto 1fr}#emoji_picker{max-height:18rem}#chat .message .message-body{max-width:65ch}#chat_page,#mail_page{grid-template-columns:20rem 1fr;box-shadow:0 0 1rem rgba(0,0,0,.1);z-index:1}#settings_page{display:grid;height:100vh;box-shadow:0 0 1rem rgba(0,0,0,.1);grid-template-columns:14rem 1fr}#settings_page sm-button{width:max-content}#settings_page #settings_panel{padding:1.5rem}#settings_page .active{background:rgba(var(--text-color),.1)}.contact.active,.mail-card.active{background:rgba(var(--text-color),.06)}.card{display:inline-flex;width:auto}#settings_panel{overflow-y:auto;max-height:100vh}}@media only screen and (min-width:1280px){#landing{gap:4vw;padding:0 8vw}#landing .title-font{font-size:3rem}#chat_page,#mail_page{grid-template-columns:21rem 1fr}#chat header{padding:.5rem 1.5rem}#chat #chat_container{padding:1rem 5rem}}@media (hover:hover){.contact:hover,.mail-card:hover,.navbar-item:hover{background:rgba(var(--text-color),.06);cursor:pointer}.contact sm-menu{opacity:0;transition:opacity .3s}.contact:hover sm-menu,sm-menu:focus-within{opacity:1}.emoji:hover{background:rgba(var(--text-color),.1)}} \ No newline at end of file diff --git a/css/main.scss b/css/main.scss index 9385afc..b6a3beb 100644 --- a/css/main.scss +++ b/css/main.scss @@ -8,13 +8,13 @@ } :root{ scroll-behavior: smooth; - font-size: clamp(16px, 1.2vmax, 48px); + font-size: clamp(1rem, 1.2vmax, 3rem); } html, body{ height: 100%; } body{ - --accent-color:#d60739; + --accent-color:#5b00d3; --secondary-color: #ffac2e; --text-color: 17, 17, 17; --text-color-light: 100, 100, 100; @@ -29,7 +29,7 @@ body{ } } body[data-theme='dark']{ - --accent-color: rgb(214 7 57); + --accent-color:#923eff; --secondary-color: #d60739; --text-color: 240, 240, 240; --text-color-light: 170, 170, 170; @@ -511,7 +511,7 @@ sm-button[variant="primary"]{ gap: 0 1rem; padding: 0.8rem 1.5rem; align-items: center; - min-height: max-content; + flex-shrink: 0; &.chat{ grid-template-columns: auto 1fr auto; grid-template-areas: 'dp . menu' @@ -599,9 +599,6 @@ sm-button[variant="primary"]{ color: rgba(var(--text-color), 0.8); margin: 1rem 0; justify-self: center; - align-self: flex-start; -} -.date-card{ align-self: center; } .mail-card.unread::before, @@ -616,6 +613,9 @@ sm-button[variant="primary"]{ } .mail-card.unread, .contact.unread{ + .time{ + color: var(--accent-color); + } h4, h5 ,p{ font-weight: 700; } @@ -809,17 +809,18 @@ sm-button[variant="primary"]{ bottom: 0; left: 0; right: 0; - height: 100%; - width: 100%; z-index: 1; padding-bottom: 1.5rem; background: rgba(var(--foreground-color), 1); transition: transform 0.3s; - transform: translateX(-100%); + transform: translateX(-110%); .header{ padding-bottom: 1rem; } } + #contacts_container{ + height: calc(100vh - 7.3rem); + } } #selected_contacts{ padding: 1.5rem; @@ -832,6 +833,11 @@ sm-button[variant="primary"]{ margin-bottom: 0; } } +#selected_contacts_container{ + display: grid; + grid-template-columns: repeat(auto-fill, minmax(6rem, 1fr)); + gap: 1rem; +} #contacts, #mails{ position: relative; grid-template-rows: max-content 1fr; @@ -848,6 +854,17 @@ sm-button[variant="primary"]{ sm-tab::part(tab){ padding: 0.8rem 1rem; } + .expanding-search{ + position: absolute; + width: 100%; + padding: 0.7rem 1.5rem; + background: linear-gradient(rgba(var(--text-color), 0.06), rgba(var(--text-color), 0.06)), rgba(var(--foreground-color), 1); + clip-path: circle(0% at calc(100% - 4rem) center); + transition: clip-path 0.3s; + &.expand{ + clip-path: circle(100%); + } + } sm-input{ margin: 0; width: 100%; @@ -859,7 +876,7 @@ sm-button[variant="primary"]{ } sm-input::part(input){ border-radius: 3rem; - padding: 0.5rem 1rem; + padding: 0.3rem 0.8rem; } h4{ text-transform: capitalize; @@ -1174,13 +1191,6 @@ sm-button[variant="primary"]{ height: 100%; overflow-y: auto; } -#dm_container, -#contacts_container, -#inbox_mail_container, -#sent_mail_container{ - height: auto; - min-height: 100%; -} #dm_container:empty{ display: none; } diff --git a/index.html b/index.html index 920f7f3..2f9e768 100644 --- a/index.html +++ b/index.html @@ -342,21 +342,33 @@

Chat

- - Add a contact - Create new group - - - - + Search - + + Create new group + + + Direct Groups + Notes @@ -393,6 +405,11 @@

Contacts

+ + Search + + + Add contact @@ -401,13 +418,20 @@ - - - Search - - +

Add group members

@@ -415,7 +439,7 @@
Create -
+
@@ -763,6 +787,14 @@ return selectedColors[Math.floor(Math.random() * selectedColors.length)] } + const contactsInfo = {} + function contactColor(floID){ + if(!contactsInfo[floID]){ + contactsInfo[floID] = randomColor() + } + return contactsInfo[floID] + } + function clearElements(array = []) { array.forEach(item => { getRef(item).innerHTML = `` @@ -865,7 +897,7 @@ if(dateDiff === 0) return `${finalHours}`; else if(dateDiff === 1) - return `yesterday`; + return `Yesterday`; else if(dateDiff > 1 && dateDiff < 8) return currentTime[0]; else @@ -873,7 +905,6 @@ } else return ` ${date} ${month}`; - } else return `${month} ${year}`; @@ -1086,7 +1117,7 @@ //display loading screen getRef('loading_page').classList.remove("hide-completely") //clear Rendered Elements - let elementsToReset = ['inbox_mail_container', 'sent_mail_container', 'contacts_container', 'chat_container', + let elementsToReset = ['inbox_mail_container', 'sent_mail_container', 'contacts_container', 'dm_container', 'chat_container', 'receiver_name', 'mail_contact_list' ] //, "backup_info" @@ -1211,15 +1242,15 @@ card.querySelector('.mail-content').textContent = content return card }, - async contactCard(floID, name, type){ + async contactCard(floID, name, type, prepend = false){ let card = getRef('contact_template').content.cloneNode(true), - cardContainer = card.firstElementChild + cardContainer = card.firstElementChild cardContainer.setAttribute("name", name || 'Unknown') cardContainer.setAttribute("flo-id", floID) cardContainer.querySelector('.name').textContent = name || 'Unknown' let initial = card.querySelector('.initial') initial.textContent = name ? name.charAt(0) : 'U' - let color = randomColor() + let color = contactColor(floID) //cardContainer.setAttribute("text-color", randomColor.primary) cardContainer.setAttribute("background-color", color) initial.setAttribute(`style`, `background-color: ${color};`) @@ -1230,15 +1261,25 @@ getRef('mail_contact_list').append(duplicateCard); } else{ - - messenger.getChat(floID).then(chat => { - const lastMessage = Object.values(chat).pop() + //render chat card for newly added contact + cardContainer.classList.add('chat') + if(prepend){ cardContainer.innerHTML += ` +
+
` + getRef('dm_container').prepend(card); + getRef('dm_container').children[0].click() + } + else{ + messenger.getChat(floID).then(chat => { + const lastMessage = Object.values(chat).pop() + cardContainer.innerHTML += `
${lastMessage.message}
${getFormatedTime(lastMessage.time, true)}
` - }) - cardContainer.classList.add('chat') - getRef('dm_container').append(card); + }) + .catch(error => console.log(error)) + getRef('dm_container').append(card); + } } }, messageBubble(floID, message, timestamp, category, unconfirmed = false){ @@ -1423,7 +1464,7 @@ chatScrollInfo['scrolledUp'] = false getRef('scroll_to_bottom').classList.remove('no-transformations') } - }) + }, {passive: true}) getRef('send_mail_to').addEventListener('input', function() { getRef('mail_contact_list').classList.remove('hide-completely') @@ -1512,8 +1553,11 @@ recentEmojis.push(clickedEmoji) localStorage.recentEmojis = recentEmojis.join(' ') renderRecentEmojis() - if(window.innerWidth > 640) - getRef('type_message').focusIn() + if(window.innerWidth > 640){ + setTimeout(() => { + getRef('type_message').focusIn() + }, 0); + } } }) @@ -1635,6 +1679,8 @@ button.classList.toggle('active') getRef('emoji_picker').classList.toggle('hide-completely') getRef('scroll_to_bottom').setAttribute('style', `top: calc(${getRef('chat_container').getBoundingClientRect().height}px - 1.5rem`) + if(!chatScrollInfo.scrolledUp) + scrollToBottom() } function copyToClipboard(element, message, parent = '.copy-row'){ @@ -1860,21 +1906,27 @@ let time = Date.now() getRef('chat_container').append(render.messageBubble(receiver, message, time, 'sent', true)) scrollToBottom(true) - if(activeChat['chatCard'] !== getRef('dm_container').children[0]){ - const contact = getRef('dm_container').querySelector(`.chat[flo-id="${activeChat.receiver}"]`) - const cloneContact = contact.cloneNode(true) - contact.remove() - activeChat['chatCard'] = cloneContact - getRef('dm_container').prepend(cloneContact) - animateTo(getRef('dm_container').children[0], [ - {transform: 'translateY(1rem)'}, - {transform: 'none'}, - ], - { - easing: 'ease', - duration: 300 - } - ) + const contact = getRef('dm_container').querySelector(`.chat[flo-id="${receiver}"]`) + if(contact){ + if(activeChat['chatCard'] !== getRef('dm_container').children[0]){ + const cloneContact = contact.cloneNode(true) + contact.remove() + activeChat['chatCard'] = cloneContact + getRef('dm_container').prepend(cloneContact) + animateTo(getRef('dm_container').children[0], [ + {transform: 'translateY(1rem)'}, + {transform: 'none'}, + ], + { + easing: 'ease', + duration: 300 + } + ) + } + } + else{ + messenger.addChat(receiver) + render.contactCard(receiver, floGlobals.contacts[receiver], 'chat', true) } messenger.sendMessage(message, receiver).then(data => { getRef(`${receiver}_${time}`).classList.remove('unconfirmed') @@ -1945,6 +1997,7 @@ startIndex = (activeChat['allMessages'].length - 20) > 0 ? activeChat['allMessages'].length - 20 : 0 endIndex = activeChat['allMessages'].length messages = activeChat['allMessages'] + renderedDates.clear() } else if(lazyLoad){ messages = activeChat['allMessages'] @@ -2280,6 +2333,11 @@ } }) + function toggleSearch(target){ + getRef(target).classList.toggle('expand') + if(getRef(target).classList.contains('expand')) + getRef(target).children[1].focusIn() + } @@ -11734,8 +11792,7 @@ Bitcoin.Util = { chats: {}, groups: {}, gkeys: {}, - appendix: {}, - contactsInfo: {} + appendix: {} } compactIDB.initDB(`${floGlobals.application}_${myFloID}`, obj).then(result => { console.info(result) diff --git a/scripts/components.js b/scripts/components.js index adefd08..62b5cc0 100644 --- a/scripts/components.js +++ b/scripts/components.js @@ -235,7 +235,7 @@ border: none; -ms-flex-align: center; align-items: center; position: relative; - gap: 1rem; + gap: 0.5rem; padding: 0.7rem 1rem; border-radius: 0.3rem; -webkit-transition: opacity 0.3s; @@ -666,8 +666,8 @@ customElements.define('sm-textarea', this.checkInput() this.fireEvent() } - focusIn() { - this.shadowRoot.querySelector('textarea').focus() + focusIn = () => { + this.textarea.focus() } fireEvent() { let event = new Event('input', { @@ -2047,31 +2047,27 @@ customElements.define('sm-popup', class extends HTMLElement { } handleTouchStart = (e) => { - this.isPressed = true - this.popupHeader.setPointerCapture(e.pointerId) - this.touchStartY = e.clientY + this.touchStartY = e.changedTouches[0].clientY this.popup.style.transition = 'transform 0.1s' this.touchStartTime = e.timeStamp } handleTouchMove = (e) => { - if(!this.isPressed) return - if (this.touchStartY < e.clientY) { - this.offset = e.clientY - this.touchStartY; + e.preventDefault() + 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.clientY; + this.offset = this.touchStartY - e.changedTouches[0].clientY; this.popup.style.transform = `translateY(-${this.offset}px)` }*/ } - + handleTouchEnd = (e) => { - this.isPressed = false - this.popupHeader.releasePointerCapture(e.pointerId) this.touchEndTime = e.timeStamp cancelAnimationFrame(this.touchEndAnimataion) - this.touchEndY = e.clientY + this.touchEndY = e.changedTouches[0].clientY this.popup.style.transition = 'transform 0.3s' if (this.touchEndTime - this.touchStartTime > 200) { if (this.touchEndY - this.touchStartY > this.threshold) { @@ -2112,7 +2108,6 @@ customElements.define('sm-popup', class extends HTMLElement { this.touchEndTime = 0 this.touchEndAnimataion; this.threshold - this.isPressed = false if (this.hasAttribute('open')) this.show() @@ -2133,14 +2128,14 @@ customElements.define('sm-popup', class extends HTMLElement { this.inputFields = this.querySelectorAll('sm-input', 'sm-checkbox', 'textarea', 'sm-textarea', 'radio') }) - this.popupHeader.addEventListener('pointerdown', (e) => {this.handleTouchStart(e)}, {passive: true}) - this.popupHeader.addEventListener('pointermove', (e) => {this.handleTouchMove(e)}, {passive: true}) - this.popupHeader.addEventListener('pointerup', (e) => {this.handleTouchEnd(e)}, {passive: true}) + this.popupHeader.addEventListener('touchstart', (e) => {this.handleTouchStart(e)}) + this.popupHeader.addEventListener('touchmove', (e) => {this.handleTouchMove(e)}) + this.popupHeader.addEventListener('touchend', (e) => {this.handleTouchEnd(e)}) } disconnectedCallback() { - this.popupHeader.removeEventListener('pointerdown', this.handleTouchStart, {passive: true}) - this.popupHeader.removeEventListener('pointermove', this.handleTouchMove, {passive: true}) - this.popupHeader.removeEventListener('pointerup', this.handleTouchEnd, {passive: true}) + this.popupHeader.removeEventListener('touchstart', this.handleTouchStart) + this.popupHeader.removeEventListener('touchmove', this.handleTouchMove) + this.popupHeader.removeEventListener('touchend', this.handleTouchEnd) } }) @@ -2607,32 +2602,28 @@ customElements.define('sm-notifications', class extends HTMLElement { } handleTouchStart = (e) => { - this.isPressed = true this.notification = e.target.closest('.notification') - this.notification.setPointerCapture(e.pointerId) - this.touchStartX = e.clientX + this.touchStartX = e.changedTouches[0].clientX this.notification.style.transition = 'initial' this.touchStartTime = e.timeStamp } handleTouchMove = (e) => { - if (!this.isPressed) return; - if (this.touchStartX < e.clientX) { - this.offset = e.clientX - this.touchStartX; - this.touchEndAnimataion = requestAnimationFrame(this.moveNotification) + 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.clientX); - this.touchEndAnimataion = requestAnimationFrame(this.moveNotification) + this.offset = -(this.touchStartX - e.changedTouches[0].clientX); + this.touchEndAnimataion = requestAnimationFrame(this.movePopup) } } handleTouchEnd = (e) => { - this.isPressed = false - this.notification.releasePointerCapture(e.pointerId) this.notification.style.transition = 'transform 0.3s, opacity 0.3s' this.touchEndTime = e.timeStamp cancelAnimationFrame(this.touchEndAnimataion) - this.touchEndX = e.clientX + this.touchEndX = e.changedTouches[0].clientX if (this.touchEndTime - this.touchStartTime > 200) { if (this.touchEndX - this.touchStartX > this.threshold) { this.removeNotification(this.notification) @@ -2650,7 +2641,7 @@ customElements.define('sm-notifications', class extends HTMLElement { } } - moveNotification = () => { + movePopup = () => { this.notification.style.transform = `translateX(${this.offset}px)` } @@ -2688,22 +2679,22 @@ customElements.define('sm-notifications', class extends HTMLElement { this.notificationPanel.prepend(notification) if (window.innerWidth > 640) { notification.animate([{ - transform: `translateX(1rem)`, - opacity: '0' - }, - { - transform: 'translateX(0)', - opacity: '1' - } + 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('pointerdown', e => { this.handleTouchStart(e) }, { passive: true }) - notification.addEventListener('pointermove', e => { this.handleTouchMove(e) }, {passive: true}) - notification.addEventListener('pointerup', e => { this.handleTouchEnd(e) }, {passive: true}) + notification.addEventListener('touchstart', this.handleTouchStart) + notification.addEventListener('touchmove', this.handleTouchMove) + notification.addEventListener('touchend', this.handleTouchEnd) } removeNotification = (notification, toLeft) => { @@ -2750,6 +2741,7 @@ customElements.define('sm-notifications', class extends HTMLElement { fill: "forwards", easing: "ease" } + this.fontSize = Number(window.getComputedStyle(document.body).getPropertyValue('font-size').match(/\d+/)[0]) this.notification this.offset this.touchStartX = 0 @@ -2758,7 +2750,6 @@ customElements.define('sm-notifications', class extends HTMLElement { this.touchEndTime = 0 this.threshold = this.notificationPanel.getBoundingClientRect().width * 0.3 this.touchEndAnimataion; - this.isPressed = false this.notificationPanel.addEventListener('click', e => { if (e.target.closest('.close'))( @@ -2785,18 +2776,15 @@ customElements.define('sm-notifications', class extends HTMLElement { }) }) observer.observe(this.notificationPanel, { + attributes: true, childList: true, subtree: true }) } - disconnectedCallback() { - notification.removeEventListener('pointerdown', e => { this.handleTouchStart(e) }, { passive: true }) - notification.removeEventListener('pointermove', e => { this.handleTouchMove(e) }, {passive: true}) - notification.removeEventListener('pointerup', e => { this.handleTouchEnd(e) }, {passive: true}) - } }) + // sm-menu const smMenu = document.createElement('template') smMenu.innerHTML = `