diff --git a/web/index.html b/web/index.html index 0042ddd..3805586 100644 --- a/web/index.html +++ b/web/index.html @@ -7,79 +7,14 @@ + @@ -727,10 +650,6 @@ footer a:hover{color:var(--laranja2)}
-
- - -
Minha conta Carrinho diff --git a/web/portal.css b/web/portal.css new file mode 100644 index 0000000..483f922 --- /dev/null +++ b/web/portal.css @@ -0,0 +1,116 @@ +/* Meus pedidos: the Site's look (tokens and shell from site-shell.css and + site-v2.css) for the order page. */ +[hidden]{display:none!important} +body{background:var(--cinza)} +.topo .acts a[aria-current="page"]{color:var(--laranja-escuro)} +.ped{padding-top:26px;padding-bottom:64px;min-height:70vh} +.volta{display:inline-block;margin-bottom:14px;font-size:15px;color:var(--texto2);text-decoration:none} +.volta:hover{color:var(--laranja-escuro)} +.pedCab{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:18px} +.pedCab h1{font-size:34px;font-weight:800;margin-top:4px} +.conta{margin-top:6px;font-size:15px;color:var(--fraco)} +.conta:empty{display:none} +.pedAcoes{display:flex;gap:10px} +.pedAviso{margin-bottom:14px;padding:12px 16px;border-radius:var(--raio2);background:var(--aviso-fundo);border:1px solid var(--aviso-linha);font-size:15px} +.pedMsg{margin-bottom:14px;font-size:15px;color:var(--laranja-escuro)} +.pedMsg:empty{display:none} + +/* Buttons, as on the Site. */ +.bPri{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:48px;padding:0 22px;border:0;border-radius:var(--raio2);background:var(--laranja);color:var(--preto);font-family:"Inter",sans-serif;font-weight:800;font-size:16px;text-decoration:none;cursor:pointer} +.bPri:hover:not(:disabled){background:#FFB53D} +.bSec{display:inline-flex;align-items:center;justify-content:center;gap:7px;height:40px;padding:0 16px;border:1px solid #D6D6D6;border-radius:var(--raio2);background:#fff;color:var(--preto);font-family:"Inter",sans-serif;font-weight:700;font-size:15px;cursor:pointer} +.bSec:hover:not(:disabled){border-color:var(--preto)} +.bSec .ic{width:18px;height:18px} +.bLink{margin-top:14px;padding:0;border:0;background:none;color:var(--laranja-escuro);font-family:"Inter",sans-serif;font-weight:700;font-size:15px;cursor:pointer;text-decoration:underline;text-underline-offset:3px} +button:disabled{opacity:.6;cursor:default} + +/* Sign in / create account. */ +.acesso{margin-bottom:26px} +.acessoIntro{margin-bottom:12px;font-size:15px;color:var(--texto2)} +.acessoIntro:empty{display:none} +.acessoGrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:16px} +.bloco{display:flex;flex-direction:column;padding:22px;border:1px solid var(--linha);border-radius:var(--raio);background:#fff} +.bloco h2{font-size:21px;font-weight:800} +.bloco .nota2{margin:4px 0 12px;font-size:14.5px;color:var(--fraco)} +.bloco label,.correcaoForm label{margin:10px 0 5px;font-size:14px;font-weight:600;color:var(--texto2)} +.bloco label .obs{font-weight:400;color:var(--fraco)} +.bloco input,.correcaoForm textarea{width:100%;height:46px;padding:0 13px;border:1px solid #D6D6D6;border-radius:var(--raio2);font:inherit;font-size:16px;background:#fff} +.correcaoForm textarea{height:auto;padding:10px 13px;resize:vertical} +.bloco input:focus,.correcaoForm textarea:focus{outline:none;border-color:var(--laranja);box-shadow:0 0 0 3px rgba(255,168,26,.2)} +.bloco .bPri{margin-top:16px} +.bloco .nota2:last-child{margin:12px 0 0} +.duas{display:grid;grid-template-columns:1fr 1fr;gap:0 12px} +.duas>div{display:flex;flex-direction:column} + +/* Orders. */ +.grupo{margin-bottom:22px} +.grupo:empty{display:none} +.tituloGrupo{margin-bottom:12px;font-size:20px;font-weight:800} +.pedido{margin-bottom:14px;padding:20px 22px;border:1px solid var(--linha);border-radius:var(--raio);background:#fff} +.pedido.pendente{border-color:var(--aviso-linha)} +.pedido.correcao{border-color:#F3B7A9} +.pedTopo{display:flex;align-items:center;gap:14px;flex-wrap:wrap} +.pedTopo>div{flex:1;min-width:160px} +.pedTopo h3{font-size:19px;font-weight:800} +.pedTopo .data{font-size:14.5px;color:var(--fraco)} +.pedTopo .valor{font-family:"Inter",sans-serif;font-size:19px;font-weight:800} +.pedido.pendente .bPri{margin-top:14px} +.pedido .nota2{margin-top:10px;font-size:15px;color:var(--fraco)} +.estado{padding:5px 11px;border-radius:999px;font-family:"Inter",sans-serif;font-size:14px;font-weight:700;background:var(--cinza);color:var(--texto2);white-space:nowrap} +.est-fin{background:var(--verde-fundo);color:var(--verde)} +.est-cor{background:#FDE8E6;color:#B42318} +.est-imp,.est-fil,.est-tra,.est-rec{background:var(--aviso-fundo);color:var(--laranja-escuro)} + +/* Progress through production. */ +.trilha{display:flex;list-style:none;margin:18px 0 6px;padding:0} +.trilha li{flex:1;position:relative;display:flex;flex-direction:column;align-items:center;gap:6px;text-align:center;font-size:14px;color:var(--fraco)} +.trilha li::before{content:"";position:absolute;top:14px;left:-50%;width:100%;height:2px;background:#E0E0E0;z-index:0} +.trilha li:first-child::before{display:none} +.trilha li.feito::before,.trilha li.atual::before{background:var(--verde)} +.trilha .marca{position:relative;z-index:1;width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;border:2px solid #D0D0D0;background:#fff;font-family:"Inter",sans-serif;font-weight:700;font-size:14px} +.trilha .marca .ic{width:16px;height:16px;stroke-width:3} +.trilha li.feito{color:var(--verde)} +.trilha li.feito .marca{background:var(--verde-fundo);border-color:var(--verde-fundo);color:var(--verde)} +.trilha li.atual{color:var(--preto)} +.trilha li.atual .marca{background:var(--laranja);border-color:var(--laranja)} +.trilha b{font-weight:600} +.trilha li.atual b{font-weight:800} +.pedAlerta{display:flex;gap:10px;align-items:flex-start;margin:16px 0 4px;padding:12px 14px;border-radius:var(--raio2);background:#FDE8E6;color:#7A1C10;font-size:15px} +.pedAlerta .ic{flex:none;width:20px;height:20px;margin-top:1px;color:#B42318} + +.itensPed{list-style:none;margin:14px 0 0;padding:0;border-top:1px solid var(--linha)} +.itensPed li{display:flex;gap:12px;align-items:baseline;padding:10px 0;border-bottom:1px solid var(--linha);font-size:15.5px} +.itensPed .nome{flex:1;font-weight:600} +.itensPed .qt{color:var(--fraco)} +.itensPed b{min-width:96px;text-align:right;font-family:"Inter",sans-serif} +.itensPed .frete .nome{font-weight:400;color:var(--texto2)} +.entregaPed{display:flex;align-items:center;gap:8px;margin-top:12px;font-size:15px;color:var(--texto2)} +.entregaPed .ic{width:19px;height:19px;color:var(--laranja-escuro)} + +/* Details. */ +.detalhe:empty{display:none} +.detalhe{margin-top:14px;padding-top:4px;border-top:1px dashed var(--linha)} +.secao{margin-top:14px} +.secao h4{margin-bottom:8px;font-size:16px;font-weight:800} +.historico{list-style:none;margin:0;padding:0 0 0 14px;border-left:2px solid var(--linha)} +.historico li{position:relative;padding:0 0 12px 12px;font-size:15px} +.historico li::before{content:"";position:absolute;left:-20px;top:6px;width:10px;height:10px;border-radius:50%;background:var(--laranja)} +.historico li b{margin-right:8px} +.historico li span{color:var(--fraco)} +.historico .motivo{margin-top:4px;padding:8px 10px;border-radius:8px;background:#FDE8E6;font-size:14.5px} +.arquivo{display:flex;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--linha)} +.arquivo>div{flex:1;min-width:0;display:flex;flex-direction:column} +.arquivo b{overflow-wrap:anywhere;font-size:15px} +.arquivo span{font-size:14px;color:var(--fraco)} +.correcaoForm{display:flex;flex-direction:column;padding:16px;border-radius:var(--raio2);background:var(--cinza)} +.correcaoForm input[type=file]{font-size:15px} +.correcaoForm .bPri{margin-top:14px;align-self:flex-start} + +.vazio{display:flex;flex-direction:column;align-items:flex-start;gap:12px;padding:26px 22px;border:1px dashed #D6D6D6;border-radius:var(--raio);background:#fff;font-size:16px;color:var(--texto2)} + +@media (max-width:600px){ + .pedCab h1{font-size:28px} + .trilha b{font-size:12.5px} + .duas{grid-template-columns:1fr} + .pedido{padding:16px} +} diff --git a/web/portal.html b/web/portal.html index 6e8ab8b..5b64e7c 100644 --- a/web/portal.html +++ b/web/portal.html @@ -1,11 +1,102 @@ -Dropstar · Meus pedidos DTF - -
DROPSTAREnviar arteMinha conta · DTF
-

Meus pedidos DTF

-
-

Entrar

-

Criar conta

Pedidos desta sessão serão associados à sua conta. Guarde sua senha: a recuperação por e-mail ainda não está disponível.

-

Acompanhamento

- + + + + + +Meus pedidos · DTF Dropstar + + + + + + + + + +
+ ENVIE SEU ARQUIVO DTF PELO SITE · DTF TÊXTIL COM O MENOR PREÇO DO METRO EM FRANCA-SP +
+ +
+ + +
+ +
+ ‹ Enviar outra arte +
+
+

DTF Dropstar

+

Meus pedidos

+

+
+
+ + +
+
+ +

+ +
+

+
+
+

Entrar

+

Já comprou com seu CNPJ? Entre para ver todos os seus pedidos.

+ + + + + +
+
+

Criar conta

+

Os pedidos feitos neste navegador passam para a sua conta.

+
+
+
+
+ + + + + +

Guarde sua senha: a recuperação por e-mail ainda não está disponível.

+
+
+
+ +
+
+
+ + + + + + diff --git a/web/portal.js b/web/portal.js index 59085b2..9a85c7f 100644 --- a/web/portal.js +++ b/web/portal.js @@ -1,62 +1,168 @@ +/* Meus pedidos: the customer's orders, their progress and files, sign-in and + the artwork correction the team may ask for. */ const $=id=>document.getElementById(id); -const node=(tag,text)=>{const el=document.createElement(tag);if(text!==undefined)el.textContent=text;return el;}; +const node=(tag,text,className)=>{const el=document.createElement(tag);if(text!==undefined&&text!==null)el.textContent=text;if(className)el.className=className;return el;}; const money=c=>(c/100).toLocaleString('pt-BR',{style:'currency',currency:'BRL'}); +const quando=d=>new Date(d).toLocaleString('pt-BR',{day:'2-digit',month:'2-digit',year:'numeric',hour:'2-digit',minute:'2-digit'}); +const dia=d=>new Date(d).toLocaleDateString('pt-BR'); +const metros=m=>Number(m).toLocaleString('pt-BR',{minimumFractionDigits:2,maximumFractionDigits:2})+' m'; +// Lucide shapes (ISC licence), the same as on the Site. +const ICONES={ + baixar:'', + local:'', + caminhao:'', + ok:'', + alerta:'', + relogio:'', +}; +function icone(nome){ + const span=document.createElement('span');span.className='icw'; + span.innerHTML=''; + return span.firstChild; +} +const PRODUTO={file:'DTF Têxtil · folha montada',avulsa:'DTF Têxtil · artes avulsas', + uvfile:'DTF UV · folha montada',uv:'DTF UV · artes avulsas'}; +// The order's way through production, as the customer sees it. +const TRILHA=['rec','tra','fil','imp','fin']; let scope,states={},environment=''; + async function api(path,body){const r=await fetch('/api'+path,{headers:{'Content-Type':'application/json'},...(body===undefined?{}:{method:'POST',body:JSON.stringify(body)})});const d=await r.json();if(!r.ok){const error=new Error(typeof d.detail==='string'?d.detail:'Confira os campos informados.');error.status=r.status;throw error;}return d;} -function button(text,fn){const b=node('button',text);b.onclick=async()=>{b.disabled=true;try{await fn();}catch(e){$('message').textContent=e.message;}finally{b.disabled=false;}};return b;} +const aviso=text=>{$('message').textContent=text||'';}; +function button(text,fn,className='bSec'){const b=node('button',text,className);b.type='button';b.onclick=async()=>{b.disabled=true;try{await fn();}catch(e){aviso(e.message);}finally{b.disabled=false;}};return b;} function forgetCheckout(){for(const k of ['dtf-quote','dtf-request-key','dtf-request-body'])localStorage.removeItem(k);} + +function trilha(state){ + const ol=node('ol',null,'trilha'); + const atual=state==='cor'?-1:TRILHA.indexOf(state); + TRILHA.forEach((s,i)=>{ + const li=node('li',null,idetails(order.id,content)),content);$('orders').append(card); - if(new URLSearchParams(location.search).get('order')===order.id)await details(order.id,content); + const card=node('article',null,'pedido'+(order.state==='cor'?' correcao':''));card.id='order-'+order.id; + const topo=node('div',null,'pedTopo'); + const nome=node('div');nome.append(node('h3','Pedido #'+order.number),node('span',quando(order.created_at),'data')); + topo.append(nome,node('span',states[order.state],'estado est-'+order.state),node('b',money(order.snapshot.total_cents)+(environment==='local'?' · teste':''),'valor')); + card.append(topo); + if(order.state==='cor'){ + const p=node('p',null,'pedAlerta');p.append(icone('alerta'),node('span','A equipe precisa de uma correção na sua arte. Abra os detalhes para ver o motivo e enviar o arquivo corrigido.')); + card.append(p); + }else card.append(trilha(order.state)); + card.append(itens(order.snapshot),entrega(order.snapshot)); + const content=node('div',null,'detalhe'); + const ver=button('Ver detalhes e arquivos',async()=>{ + if(content.childElementCount){content.replaceChildren();ver.textContent='Ver detalhes e arquivos';return;} + await details(order.id,content,order.created_at);ver.textContent='Fechar detalhes'; + },'bLink'); + card.append(ver,content);orders.append(card); + if(aberto===order.id){await details(order.id,content,order.created_at);ver.textContent='Fechar detalhes';card.scrollIntoView({block:'start'});} } - }catch(error){$('message').textContent=error.message;} + }catch(error){aviso(error.message);} } -async function details(id,container){ + +async function details(id,container,criado){ const order=await api('/customer/orders/'+id);container.replaceChildren(); - for(const [i,item] of order.snapshot.items.entries())container.append(node('p',(i+1)+'. '+item.mode+' · '+item.billed_metres+' m · nota '+item.grade+' · '+money(item.total_cents))); - const history=node('ol'); - for(const h of order.history)history.append(node('li',new Date(h.created_at).toLocaleString('pt-BR')+' · '+states[h.to_state]+(h.reason?' — '+h.reason:''))); - container.append(history); - for(const file of order.files){ - const row=node('p',(file.kind==='final'?'Arquivo final':'Correção')+' · item '+(file.item_index+1)+' · '+file.name+' · '+(file.expired?'expirado':!file.active?'substituído':'disponível até '+new Date(file.expires_at).toLocaleDateString('pt-BR'))); - if(file.active&&!file.expired)row.append(button('Baixar',async()=>{const d=await api('/customer/orders/'+id+'/files/'+file.id+'/download');const link=node('a');link.href=d.url;link.download=d.name;link.referrerPolicy='no-referrer';link.click();})); - container.append(row); + const hist=node('div',null,'secao');hist.append(node('h4','Andamento')); + const ol=node('ol',null,'historico'); + // Payment is where the order starts: the first step is not a movement. + if(criado){const li=node('li');li.append(node('b',states.rec||'Arte recebida'),node('span',quando(criado)));ol.append(li);} + for(const h of order.history){ + const li=node('li');li.append(node('b',states[h.to_state]),node('span',quando(h.created_at))); + if(h.reason)li.append(node('p',h.reason,'motivo')); + ol.append(li); + } + hist.append(ol);container.append(hist); + if(order.files.length){ + const arq=node('div',null,'secao');arq.append(node('h4','Arquivos')); + for(const file of order.files){ + const row=node('div',null,'arquivo'); + const info=node('div'); + info.append(node('b',file.name),node('span',(file.kind==='final'?'Arquivo final':'Correção')+' · item '+(file.item_index+1)+' · '+ + (file.expired?'expirado':!file.active?'substituído':'disponível até '+dia(file.expires_at)))); + row.append(info); + if(file.active&&!file.expired){ + const b=button('Baixar',async()=>{const d=await api('/customer/orders/'+id+'/files/'+file.id+'/download');const link=node('a');link.href=d.url;link.download=d.name;link.referrerPolicy='no-referrer';link.click();}); + b.prepend(icone('baixar'));row.append(b); + } + arq.append(row); + } + container.append(arq); } if(order.state==='cor'){ - const form=node('form');form.append(node('h3','Enviar arte corrigida')); - const inputs=order.snapshot.items.map((item,index)=>{const label=node('label','Item '+(index+1)+' · '+item.mode);const input=node('input');input.type='file';input.multiple=true;input.dataset.item=index;label.append(input);form.append(label);return input;}); - const note=node('textarea');note.placeholder='Descreva a correção';note.required=true;note.maxLength=1000;form.append(note); - const submit=node('button','Enviar correção');submit.type='submit';form.append(submit); + const form=node('form',null,'secao correcaoForm');form.append(node('h4','Enviar arte corrigida')); + const inputs=order.snapshot.items.map((item,index)=>{ + const label=node('label',(index+1)+'. '+(PRODUTO[item.mode]||item.mode)); + const input=node('input');input.type='file';input.multiple=true;input.dataset.item=index; + form.append(label,input);return input; + }); + const nl=node('label','O que foi corrigido');const note=node('textarea');note.required=true;note.maxLength=1000;note.rows=3; + form.append(nl,note); + const submit=node('button','Enviar correção','bPri');submit.type='submit';form.append(submit); form.onsubmit=async event=>{event.preventDefault();submit.disabled=true;try{ - const files=[];for(const [index,input] of inputs.entries())for(const file of input.files)files.push({item_index:index,upload_id:await dtfUpload(file,{api,scope:scope+':correction:'+id+':'+order.version,progress:text=>$('message').textContent=text})}); + const files=[];for(const [index,input] of inputs.entries())for(const file of input.files)files.push({item_index:index,upload_id:await dtfUpload(file,{api,scope:scope+':correction:'+id+':'+order.version,progress:text=>aviso(text)})}); if(!files.length)throw new Error('Selecione pelo menos um arquivo corrigido.'); await api('/customer/orders/'+id+'/corrections',{version:order.version,files,note:note.value}); - $('message').textContent='Correção enviada. Aguarde a conferência da equipe.';await details(id,container); - }catch(error){$('message').textContent=error.message;}finally{submit.disabled=false;}}; + aviso('Correção enviada. Aguarde a conferência da equipe.');await details(id,container,criado); + }catch(error){aviso(error.message);}finally{submit.disabled=false;}}; container.append(form); } } + async function migrateGuestCart(previous,next){ if(previous===next)return; const database=await new Promise((resolve,reject)=>{const r=indexedDB.open('dtf-local-cart',1);r.onupgradeneeded=()=>r.result.createObjectStore('cart');r.onsuccess=()=>resolve(r.result);r.onerror=()=>reject(r.error);}); @@ -65,13 +171,13 @@ async function migrateGuestCart(previous,next){ } async function authenticate(path,body){ const previous=scope,guest=!(await api('/account/me')).customer; - await api(path,body);forgetCheckout();$('message').textContent='Acesso confirmado.'; + await api(path,body);forgetCheckout();aviso('Acesso confirmado.'); const next=(await api('/session')).cart_scope; - if(guest)try{await migrateGuestCart(previous,next);}catch{$('message').textContent='Acesso confirmado. Não foi possível transferir o carrinho salvo neste navegador.';} + if(guest)try{await migrateGuestCart(previous,next);}catch{aviso('Acesso confirmado. Não foi possível transferir o carrinho salvo neste navegador.');} await load();$('password').value='';$('register-password').value=''; } -$('login').onsubmit=async event=>{event.preventDefault();try{await authenticate('/account/login',{email:$('email').value,password:$('password').value});}catch(e){$('message').textContent=e.message;}}; -$('register').onsubmit=async event=>{event.preventDefault();try{await authenticate('/account/register',{customer:{cnpj:$('cnpj').value,zap:$('phone').value,mail:$('register-email').value},password:$('register-password').value});}catch(e){$('message').textContent=e.message;}}; -$('logout').onclick=async()=>{try{await window.dtfForgetPrivateData();await api('/account/logout',{});location.reload();}catch(error){$('message').textContent='Não foi possível limpar os dados deste navegador. Feche as abas do Site e limpe os dados do site nas configurações do navegador.';}}; +$('login').onsubmit=async event=>{event.preventDefault();try{await authenticate('/account/login',{email:$('email').value,password:$('password').value});}catch(e){aviso(e.message);}}; +$('register').onsubmit=async event=>{event.preventDefault();try{await authenticate('/account/register',{customer:{cnpj:$('cnpj').value,zap:$('phone').value,mail:$('register-email').value},password:$('register-password').value});}catch(e){aviso(e.message);}}; +$('logout').onclick=async()=>{try{await window.dtfForgetPrivateData();await api('/account/logout',{});location.reload();}catch(error){aviso('Não foi possível limpar os dados deste navegador. Feche as abas do Site e limpe os dados do site nas configurações do navegador.');}}; $('refresh').onclick=load; load(); diff --git a/web/site-config.js b/web/site-config.js index 4220a1d..7cea92e 100644 --- a/web/site-config.js +++ b/web/site-config.js @@ -8,7 +8,6 @@ const rs=v=>'R$ '+v.toFixed(2).replace('.',','); // Ícones (Lucide, licença ISC) desenhados no próprio HTML: nada a carregar, e a // cor vem do texto em volta. Os que ficam no HTML estático são os mesmos. const ICONES={ - busca:'', conta:'', sacola:'', enviar:'', diff --git a/web/site-shell.css b/web/site-shell.css new file mode 100644 index 0000000..1aacd9f --- /dev/null +++ b/web/site-shell.css @@ -0,0 +1,80 @@ +/* Site DTF — what every page shares: the tokens, the base type, the stripe, + header, category menu and footer. The Site (index.html) and the order page + (portal.html) both load it before their own styles. */ +:root{ + /* tokens do site institucional */ + --font-family-base:"Roboto",sans-serif; --font-family-title:"Inter",sans-serif; + --font-color-base:#03060b; --font-color-title:#03060b; + --font-weight-base:400; --font-weight-title:700; --font-weight-subtitle:600; --font-weight-button:600; + --font-size-title:3rem; --font-size-subtitle:2rem; --font-size-button:1.4rem; + --font-size-small:1.2rem; --font-size-base:1.4rem; --font-size-medium:1.6rem; --font-size-big:1.8rem; + --line-height:1.5; + --white:#fff; --black:#03060b; + --gray-1:#f9f9f9; --gray-2:#c3c3c3; --gray-3:#707070; --gray-4:#363636; + --primary-color:#ffa81a; --secondary-color:#ff7f0a; + --white-transparency:#ffffffb3; --transition:all .4s ease; + /* apelidos usados nesta pagina, mapeados nos tokens acima */ + --marinho:var(--black); --papel:var(--white); --cinza:var(--gray-1); + --tx:var(--font-color-base); --fraco:var(--gray-3); --linha:#e6e6e6; + --laranja:var(--primary-color); --laranja2:var(--secondary-color); + --vermelho:#D94A28; --verde:#2E9E5B; --verde-ml:#00A650; --verde-claro:#57D68A; + --sombra:0 1px 2px rgba(3,6,11,.05), 0 4px 14px rgba(3,6,11,.05); + --sombra-alta:0 2px 6px rgba(3,6,11,.07), 0 10px 30px rgba(3,6,11,.11)} + +*{box-sizing:border-box;margin:0;padding:0} +html{scroll-behavior:smooth;font-size:62.5%} +body{background:var(--white);color:var(--font-color-base);font-family:var(--font-family-base); + font-size:var(--font-size-base);font-weight:var(--font-weight-base);line-height:var(--line-height); + -webkit-font-smoothing:antialiased} +h1,h2,h3{font-family:var(--font-family-title);color:var(--font-color-title); + font-weight:var(--font-weight-title);letter-spacing:normal;line-height:1.15} +.w{max-width:1020px;margin:0 auto;padding:0 22px} + +/* tarja rotativa, como no site */ +.tarja{background:var(--laranja);color:#111;text-align:center;padding:8px 16px; + font-family:"Inter",sans-serif;font-weight:700;font-size:14.5px;letter-spacing:.02em} +.tarja a{color:#111;text-decoration:none} + +/* topo */ +.topo{background:#fff;border-bottom:1px solid var(--linha);position:sticky;top:0;z-index:60} +.topo .w{display:flex;align-items:center;gap:22px;padding-top:15px;padding-bottom:15px} +.logo{display:flex;align-items:center;text-decoration:none;white-space:nowrap;flex:none} +.logo img{height:26px;width:auto;display:block} +.logotexto{font-family:"Inter",sans-serif;font-weight:700;font-size:19px;color:var(--black); + letter-spacing:-.03em} +.logotexto i{font-style:normal;color:var(--laranja)} +.acts{margin-left:auto;display:flex;gap:18px;align-items:center;font-size:15px} +.acts a{color:var(--tx);text-decoration:none;display:flex;align-items:center;gap:6px} +.acts a:hover{color:var(--laranja)} + +/* menu */ +.menu{background:#fff;border-bottom:1px solid var(--linha)} +.menu .w{display:flex;gap:0;flex-wrap:wrap} +.mi{position:relative} +.mi>a{display:block;padding:13px 16px;font-family:"Inter",sans-serif;font-weight:600; + font-size:15px;color:var(--tx);text-decoration:none;white-space:nowrap} +.mi:hover>a{color:var(--laranja)} +.mi.on>a{color:var(--laranja);box-shadow:inset 0 -2px 0 var(--laranja)} +.sub{display:none;position:absolute;top:100%;left:0;background:#fff;border:1px solid var(--linha); + border-radius:0 0 9px 9px;min-width:224px;padding:7px 0;z-index:70; + box-shadow:0 10px 26px rgba(0,0,0,.09)} +.mi:hover .sub,.mi:focus-within .sub{display:block} +.sub a{display:block;padding:8px 17px;font-size:15px;color:var(--fraco);text-decoration:none} +.sub a:hover{color:var(--laranja);background:var(--cinza)} +@media(max-width:820px){ + .menu .w{overflow-x:auto;flex-wrap:nowrap} + .sub{display:none!important} +} + +footer{background:#000;color:#8D9AB0;padding:26px 0 20px;font-size:15px} +.frow{display:flex;gap:26px;align-items:flex-start;flex-wrap:wrap;padding-bottom:18px} +.fmarca{display:flex;align-items:center;gap:9px;font-family:"Inter",sans-serif; + font-weight:700;font-size:15px;color:var(--laranja);letter-spacing:.06em;white-space:nowrap} +.fmarca img{height:22px;width:auto;display:block;filter:brightness(0) invert(1)} +footer a{color:#8D9AB0;text-decoration:none} +footer a:hover{color:var(--laranja2)} +.flinks{display:flex;gap:18px;flex-wrap:wrap;font-size:15px} +.fcont{margin-left:auto;text-align:right;font-size:15px;line-height:1.7} +@media(max-width:720px){.fcont{margin-left:0;text-align:left}} +.fbase{border-top:1px solid rgba(255,255,255,.1);padding-top:14px;display:flex; + justify-content:space-between;gap:12px;flex-wrap:wrap;font-size:13.5px;color:#5A6570} diff --git a/web/site-v2.css b/web/site-v2.css index 16a5059..1ddad08 100644 --- a/web/site-v2.css +++ b/web/site-v2.css @@ -340,8 +340,6 @@ section+section{border-top:0} html:is([data-rota="pagamento"],[data-rota="pix"]) .checkout{max-width:1040px;margin-top:8px} html:is([data-rota="pagamento"],[data-rota="pix"]) .pagGrid{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:32px;align-items:start} .ic{width:21px;height:21px;flex:none;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vertical-align:middle} -.busca .lupa{display:flex;font-size:0} -.busca .lupa .ic{width:18px;height:18px} .acts a .ic{width:23px;height:23px} .cartIc{position:relative;display:inline-flex} .acts #cartLink{gap:11px}