Skip to content

Commit af2a0ea

Browse files
committed
responsivo: corrige navbar e layout mobile
- menu hambúrguer no mobile (links ficavam inacessíveis em <=900px) - grids de colunas fixas que estouravam a largura (compliance, fases, svc-meta, timeline, severity-card, manifesto do Sobre, post-row do blog) - breakpoint <=560px: escala de títulos, padding e rodapé empilhado - oculta tooltip do chip em Produtos (overflow horizontal fantasma) - cache-busting por hash nos CSS (?v=) e fim da cadeia de @import
1 parent b11c1a9 commit af2a0ea

7 files changed

Lines changed: 106 additions & 21 deletions

File tree

i18n/en.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
[nav_talk]
55
other = "Talk to us"
66

7+
[nav_menu]
8+
other = "Menu"
9+
710
# Hero
811
[hero_eyebrow]
912
other = "Application Security Labs"

i18n/pt.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
[nav_talk]
55
other = "Falar com a gente"
66

7+
[nav_menu]
8+
other = "Menu"
9+
710
# Hero
811
[hero_eyebrow]
912
other = "Application Security Labs"

layouts/partials/head.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
{{ partial "jsonld.html" . }}
1212
<script async defer src="https://tc.guisso.dev/tracker.js" data-website-id="cmq7cuek2000b11qcmjx5zh3u"></script>
1313
<link rel="icon" href="/assets/flag-color.png">
14-
<link rel="stylesheet" href="/css/site.css">
14+
{{/* CSS carregado em ordem de dependência; ?v=<hash> força refresh quando o arquivo muda (anti-cache). */}}
15+
{{ range slice "css/colors_and_type.css" "css/ef-components.css" "css/site.css" }}
16+
<link rel="stylesheet" href="/{{ . }}?v={{ substr (readFile (printf "static/%s" .) | sha256) 0 10 }}">
17+
{{ end }}
1518
<link href="https://cdn.jsdelivr.net/npm/@tabler/icons-webfont@latest/tabler-icons.min.css" rel="stylesheet">
1619
</head>

layouts/partials/nav.html

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,39 @@
1-
<header class="eks-nav">
1+
<header class="eks-nav" id="eks-nav">
22
<div class="page eks-nav-inner">
33
<a href="{{ site.Home.RelPermalink }}" class="eks-brand"><img src="/assets/flag-color.png" width="22" height="22" alt="eflag" style="display:block"> eflag</a>
4-
<nav class="eks-nav-links">
5-
{{ $current := .RelPermalink }}
6-
{{ range .Site.Menus.main }}
7-
<a href="{{ .URL }}" class="eks-nav-link{{ if hasPrefix $current .URL }} active{{ end }}">{{ .Name }}</a>
8-
{{ end }}
9-
</nav>
10-
<div class="eks-nav-right">
11-
{{/* Alterna para a tradução da página atual; cai na home do outro idioma se não houver. */}}
12-
{{ range .Translations }}
13-
<a href="{{ .RelPermalink }}" class="eks-nav-lang" lang="{{ .Language.LanguageCode }}" data-tianji-event="nav-lang-switch" data-tianji-event-to="{{ .Language.Lang }}">{{ .Language.Lang | upper }}</a>
14-
{{ end }}
15-
<a href="mailto:{{ .Site.Params.email }}" class="ef-btn ef-btn-primary ef-btn-sm" data-tianji-event="nav-contact">{{ i18n "nav_talk" }}</a>
4+
<button class="eks-nav-toggle" type="button" aria-label="{{ i18n "nav_menu" | default "Menu" }}" aria-expanded="false" aria-controls="eks-nav-collapse">
5+
<span></span><span></span><span></span>
6+
</button>
7+
<div class="eks-nav-collapse" id="eks-nav-collapse">
8+
<nav class="eks-nav-links">
9+
{{ $current := .RelPermalink }}
10+
{{ range .Site.Menus.main }}
11+
<a href="{{ .URL }}" class="eks-nav-link{{ if hasPrefix $current .URL }} active{{ end }}">{{ .Name }}</a>
12+
{{ end }}
13+
</nav>
14+
<div class="eks-nav-right">
15+
{{/* Alterna para a tradução da página atual; cai na home do outro idioma se não houver. */}}
16+
{{ range .Translations }}
17+
<a href="{{ .RelPermalink }}" class="eks-nav-lang" lang="{{ .Language.LanguageCode }}" data-tianji-event="nav-lang-switch" data-tianji-event-to="{{ .Language.Lang }}">{{ .Language.Lang | upper }}</a>
18+
{{ end }}
19+
<a href="mailto:{{ .Site.Params.email }}" class="ef-btn ef-btn-primary ef-btn-sm" data-tianji-event="nav-contact">{{ i18n "nav_talk" }}</a>
20+
</div>
1621
</div>
1722
</div>
1823
</header>
24+
<script>
25+
(function () {
26+
var nav = document.getElementById('eks-nav');
27+
if (!nav) return;
28+
var btn = nav.querySelector('.eks-nav-toggle');
29+
if (!btn) return;
30+
function close() { nav.classList.remove('open'); btn.setAttribute('aria-expanded', 'false'); }
31+
btn.addEventListener('click', function () {
32+
var open = nav.classList.toggle('open');
33+
btn.setAttribute('aria-expanded', open ? 'true' : 'false');
34+
});
35+
nav.querySelectorAll('.eks-nav-collapse a').forEach(function (a) {
36+
a.addEventListener('click', close);
37+
});
38+
})();
39+
</script>

layouts/sobre/list.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ <h1>{{ i18n "sobre_h1" }}</h1>
99
</section>
1010

1111
<section class="eks-section">
12-
<div class="page" style="display:grid;grid-template-columns:220px 1fr;gap:64px;align-items:start">
12+
<div class="page eks-split">
1313
<div>
1414
<div class="eks-section-num">01</div>
1515
<div class="eks-section-kicker" style="margin-top:8px">{{ i18n "sobre_manifesto_kicker" }}</div>

static/css/ef-components.css

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
/* ef-components.css, shared component styles for preview cards & UI kits
22
Updated to Cold Lab (v4): 4–8px radii, cyan focus ring, brand chips, code blocks. */
33

4-
@import url('./colors_and_type.css');
5-
64
/* ========== BUTTONS ========== */
75
.ef-btn {
86
font-family: var(--font);

static/css/site.css

Lines changed: 61 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
Imports the design system foundation and component primitives.
44
============================================================ */
55

6-
@import url('./ef-components.css');
7-
86
* { box-sizing: border-box; }
97
html, body { margin: 0; padding: 0; }
108
body { background: var(--bg); color: var(--fg1); font-family: var(--font); }
@@ -40,6 +38,17 @@ a { color: inherit; }
4038
.eks-nav-lang:hover { color: var(--fg1); border-color: var(--fg3); }
4139
.eks-locale { font-family: var(--mono); font-size: 11px; color: var(--fg3); letter-spacing: .04em; cursor: pointer; }
4240
.eks-locale.active { color: var(--fg1); font-weight: 700; }
41+
/* display:contents keeps links + right as direct flex children of the bar on desktop */
42+
.eks-nav-collapse { display: contents; }
43+
.eks-nav-toggle {
44+
display: none; flex-direction: column; justify-content: center; gap: 5px;
45+
width: 40px; height: 40px; margin-left: auto; padding: 0;
46+
background: none; border: none; cursor: pointer;
47+
}
48+
.eks-nav-toggle span { display: block; width: 22px; height: 2px; margin: 0 auto; background: var(--fg1); border-radius: 2px; transition: transform var(--t-fast), opacity var(--t-fast); }
49+
.eks-nav.open .eks-nav-toggle span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
50+
.eks-nav.open .eks-nav-toggle span:nth-child(2) { opacity: 0; }
51+
.eks-nav.open .eks-nav-toggle span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
4352

4453
/* ── HERO ──────────────────────────────────────── */
4554
.eks-hero {
@@ -378,6 +387,7 @@ body[data-density="compact"] .eks-post-main p { font-size: 13px; margin-bottom:
378387
.eks-related-meta { font-family: var(--mono); font-size: 10px; color: var(--fg4); letter-spacing: .04em; margin-top: auto; }
379388

380389
/* ── SOBRE (About page) ───────────────────────── */
390+
.eks-split { display: grid; grid-template-columns: 220px 1fr; gap: 64px; align-items: start; }
381391
.eks-sobre-hero { background-image: var(--pat-dots); background-size: var(--pat-dots-size); border-bottom: 1px solid var(--border); padding: 96px 0 88px; }
382392
.eks-sobre-hero h1 { font-size: 56px; font-weight: 700; letter-spacing: -.03em; line-height: 1.05; color: var(--fg1); margin: 0 0 24px; max-width: 820px; }
383393
.eks-sobre-hero p { font-size: 19px; color: var(--fg2); max-width: 640px; line-height: 1.6; margin: 0; }
@@ -627,7 +637,20 @@ body[data-density="compact"] .eks-post-main p { font-size: 13px; margin-bottom:
627637
.eks-metrics-grid { grid-template-columns: repeat(2, 1fr); }
628638
.eks-news-grid { grid-template-columns: 1fr; }
629639
.eks-foot-grid { grid-template-columns: 1fr 1fr; gap: 32px; }
630-
.eks-nav-links { display: none; }
640+
/* Mobile nav: hamburger reveals a full-width dropdown panel */
641+
.eks-nav-toggle { display: flex; }
642+
.eks-nav-collapse {
643+
display: none;
644+
position: absolute; top: 100%; left: 0; right: 0;
645+
flex-direction: column; align-items: stretch; gap: 0;
646+
background: var(--surface); border-bottom: 1px solid var(--border);
647+
box-shadow: var(--shadow-md); padding: 8px 0 16px;
648+
}
649+
.eks-nav.open .eks-nav-collapse { display: flex; }
650+
.eks-nav-links { flex-direction: column; gap: 0; padding: 0 32px; }
651+
.eks-nav-link { font-size: 15px; padding: 13px 0; border-bottom: 1px solid var(--border); }
652+
.eks-nav-right { margin-left: 0; padding: 16px 32px 0; gap: 12px; flex-wrap: wrap; }
653+
.eks-nav-right .ef-btn { flex: 1; justify-content: center; }
631654
.eks-problem-grid { grid-template-columns: 1fr; }
632655
.eks-loop { grid-template-columns: 1fr; }
633656
.eks-emerge { grid-template-columns: 1fr; }
@@ -637,9 +660,12 @@ body[data-density="compact"] .eks-post-main p { font-size: 13px; margin-bottom:
637660
.eks-team-grid { grid-template-columns: repeat(2, 1fr); }
638661
.eks-principles { grid-template-columns: 1fr; }
639662
.eks-svc-layout { grid-template-columns: 1fr; }
663+
.eks-split { grid-template-columns: 1fr; gap: 24px; }
640664
.eks-svc-toc { position: static; }
641665
.eks-related-grid { grid-template-columns: 1fr; }
642-
.eks-post-row { grid-template-columns: 80px 1fr; }
666+
.eks-post-row { grid-template-columns: 64px 1fr; gap: 20px; }
667+
.eks-post-main { min-width: 0; }
668+
.eks-post-tags { flex-wrap: wrap; }
643669
.eks-post-aside { display: none; }
644670
.eks-advisory-row { grid-template-columns: 80px 1fr; gap: 12px; }
645671
.eks-advisory-row .eks-advisory-sev, .eks-advisory-row .eks-advisory-cve { display: none; }
@@ -650,6 +676,37 @@ body[data-density="compact"] .eks-post-main p { font-size: 13px; margin-bottom:
650676
.prd-section-grid { grid-template-columns: 1fr; gap: 32px; }
651677
.prd-aside { position: static; flex-direction: row; align-items: center; gap: 16px; }
652678
.prd-section-icon { width: 64px; height: 64px; }
679+
/* Hover tooltip can't trigger on touch and its 280px box overflows the viewport */
680+
.prd-tag { cursor: default; }
681+
.prd-tag::after { display: none; }
653682
.prd-name { font-size: 30px; }
654683
.prd-features { grid-template-columns: 1fr; }
684+
/* Fixed-column grids that would otherwise overflow narrow screens */
685+
.eks-compl-row { grid-template-columns: 1fr; gap: 6px; padding: 18px 22px; }
686+
.eks-compl-deadline { text-align: left; }
687+
.eks-phase { grid-template-columns: 1fr; gap: 6px; padding: 18px 22px; }
688+
.eks-phase-dur { text-align: left; }
689+
.eks-timeline-row { grid-template-columns: 1fr; gap: 8px; }
690+
.eks-svc-meta { grid-template-columns: repeat(2, 1fr); }
691+
.eks-post-body .severity-card { grid-template-columns: 1fr; }
692+
}
693+
694+
/* ── PHONES ──────────────────────────────────── */
695+
@media (max-width: 560px) {
696+
.page, .page-wide, .page-narrow { padding-left: 20px; padding-right: 20px; }
697+
.eks-hero { padding: 56px 0 64px; }
698+
.eks-hero-h { font-size: 34px; }
699+
.eks-hero-meta { grid-template-columns: 1fr 1fr; gap: 20px; }
700+
.eks-section { padding: 56px 0; }
701+
.eks-dark, .eks-cta { padding: 64px 0; }
702+
.eks-section-title { font-size: 28px; }
703+
.eks-blog-hero h1 { font-size: 34px; }
704+
.eks-sobre-hero h1, .eks-svc-hero h1 { font-size: 30px; }
705+
.eks-post-h1 { font-size: 27px; }
706+
.eks-post-body h2 { font-size: 24px; }
707+
.eks-cta-h { font-size: 26px; }
708+
.eks-cta-actions { width: 100%; }
709+
.eks-cta-actions .ef-btn { flex: 1; justify-content: center; }
710+
.eks-metric-val { font-size: 36px; }
711+
.eks-foot-bottom { flex-direction: column; gap: 12px; align-items: flex-start; }
655712
}

0 commit comments

Comments
 (0)