diff --git a/web/css/app.css b/web/css/app.css index a091a28..ab9ddbd 100644 --- a/web/css/app.css +++ b/web/css/app.css @@ -91,7 +91,7 @@ code { font-family: var(--mono); font-size: 0.92em; } border-radius: 0; } .menu-btn:hover, .menu.open .menu-btn { background: var(--accent); color: #fff; } -#btn-sidebar { width: 34px; border-radius: 3px; margin: 3px 0; } +#btn-sidebar { width: 34px; border-radius: 0; margin: 3px 0; } #btn-sidebar:hover { background: #e0dcd8; } .menu-dropdown { @@ -143,107 +143,34 @@ code { font-family: var(--mono); font-size: 0.92em; } .tb-label { font-size: 12px; margin-left: 4px; } /* --------------------------------------------------------------------------- - Sistema de botões "rich" (mesma linguagem visual do Rich Button do - spell.sh — gradientes, brilho interno, glow e micro-interações — porém 100% - CSS puro, sem React/Tailwind, derivado dos tokens de tema via color-mix + - light-dark, portanto compatível com os 21 temas e com CSP estrita). + Sistema de botões "light": flat e sóbrio — sem gradientes, brilhos, sombras + internas ou cantos arredondados. Fundo sólido derivado dos tokens de tema + (compatível com os 21 temas e CSP estrita); hover/active apenas tingem o + fundo com o tom de painel imediatamente mais escuro. --------------------------------------------------------------------------- */ .btn { - position: relative; - isolation: isolate; font: inherit; font-size: 13px; color: var(--fg); - border: 1px solid color-mix(in oklab, var(--border) 70%, var(--fg) 30%); - border-radius: 8px; + border: 1px solid var(--border); + border-radius: 0; padding: 4px 12px; cursor: pointer; - background: - linear-gradient(180deg, - color-mix(in oklab, var(--panel-2), white 55%) 0%, - var(--panel-2) 48%, - color-mix(in oklab, var(--panel-2), var(--fg) 10%) 100%); - box-shadow: - inset 0 1px 0 light-dark(rgba(255, 255, 255, .85), rgba(255, 255, 255, .14)), - inset 0 -1px 0 color-mix(in oklab, var(--panel-2), var(--fg) 14%), - 0 1px 2px rgba(0, 0, 0, .12), - 0 2px 6px -2px rgba(0, 0, 0, .10); - text-shadow: 0 1px 0 light-dark(rgba(255, 255, 255, .7), rgba(0, 0, 0, .35)); - transition: transform .12s ease, box-shadow .16s ease, filter .16s ease; -} -.btn::after { /* reflexo superior estilo "vidro" */ - content: ''; - position: absolute; - inset: 1px 1px 50% 1px; - z-index: -1; - border-radius: 7px 7px 10px 10px; - background: linear-gradient(180deg, light-dark(rgba(255, 255, 255, .5), rgba(255, 255, 255, .07)), transparent); - pointer-events: none; -} -.btn:hover { - transform: translateY(-1px); - filter: brightness(1.04) saturate(1.05); - box-shadow: - inset 0 1px 0 light-dark(rgba(255, 255, 255, .9), rgba(255, 255, 255, .18)), - inset 0 -1px 0 color-mix(in oklab, var(--panel-2), var(--fg) 16%), - 0 3px 8px -1px rgba(0, 0, 0, .18), - 0 6px 16px -6px rgba(0, 0, 0, .14); -} -.btn:active { - transform: translateY(1px) scale(.98); - filter: brightness(.97); - box-shadow: - inset 0 2px 5px rgba(0, 0, 0, .22), - inset 0 -1px 0 light-dark(rgba(255, 255, 255, .5), rgba(255, 255, 255, .08)); -} -.btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; } -.btn:disabled { - opacity: .45; - cursor: default; - transform: none; - filter: saturate(.4); - box-shadow: inset 0 1px 0 light-dark(rgba(255, 255, 255, .6), rgba(255, 255, 255, .1)); + background: var(--panel); + transition: background .12s ease, border-color .12s ease, color .12s ease; } +.btn:hover { background: var(--panel-2); border-color: color-mix(in oklab, var(--border), var(--fg) 20%); } +.btn:active { background: color-mix(in oklab, var(--panel-2), var(--fg) 8%); } +.btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; } +.btn:disabled { opacity: .5; cursor: default; background: var(--panel); border-color: var(--border); } .btn-icon { display: inline-flex; align-items: center; justify-content: center; padding: 4px 10px; } -.btn-primary { - color: #fff; - text-shadow: 0 1px 1px rgba(0, 0, 0, .25); - border-color: color-mix(in oklab, var(--accent), black 28%); - background: - linear-gradient(180deg, - color-mix(in oklab, var(--accent), white 26%) 0%, - var(--accent) 48%, - color-mix(in oklab, var(--accent), black 14%) 100%); - box-shadow: - inset 0 1px 0 rgba(255, 255, 255, .38), - inset 0 -1px 0 color-mix(in oklab, var(--accent), black 24%), - 0 2px 8px -1px color-mix(in oklab, var(--accent) 55%, transparent), - 0 1px 2px rgba(0, 0, 0, .18); -} -.btn-primary::after { background: linear-gradient(180deg, rgba(255, 255, 255, .28), transparent); } -.btn-primary:hover { - box-shadow: - inset 0 1px 0 rgba(255, 255, 255, .45), - inset 0 -1px 0 color-mix(in oklab, var(--accent), black 26%), - 0 4px 14px -2px color-mix(in oklab, var(--accent) 65%, transparent), - 0 2px 4px rgba(0, 0, 0, .2); -} -.btn-danger { - color: #fff; - text-shadow: 0 1px 1px rgba(0, 0, 0, .25); - border-color: color-mix(in oklab, var(--danger), black 26%); - background: - linear-gradient(180deg, - color-mix(in oklab, var(--danger), white 24%) 0%, - var(--danger) 48%, - color-mix(in oklab, var(--danger), black 12%) 100%); - box-shadow: - inset 0 1px 0 rgba(255, 255, 255, .35), - inset 0 -1px 0 color-mix(in oklab, var(--danger), black 22%), - 0 2px 8px -1px color-mix(in oklab, var(--danger) 50%, transparent); -} -.btn-danger::after { background: linear-gradient(180deg, rgba(255, 255, 255, .25), transparent); } -.btn-small { font-size: 12px; padding: 2px 9px; border-radius: 6px; } +.btn-primary { background: var(--accent); border-color: var(--accent); color: #fff; } +.btn-primary:hover { background: var(--accent-dark); border-color: var(--accent-dark); color: #fff; } +.btn-primary:active { background: color-mix(in oklab, var(--accent-dark), black 12%); border-color: color-mix(in oklab, var(--accent-dark), black 12%); color: #fff; } +.btn-danger { background: var(--danger); border-color: var(--danger); color: #fff; } +.btn-danger:hover { background: color-mix(in oklab, var(--danger), black 12%); border-color: color-mix(in oklab, var(--danger), black 12%); color: #fff; } +.btn-danger:active { background: color-mix(in oklab, var(--danger), black 20%); color: #fff; } +.btn-small { font-size: 12px; padding: 2px 9px; } .fmt { min-width: 32px; justify-content: center; font-size: 13px; } #fmt-tools.disabled { opacity: .45; pointer-events: none; } @@ -251,49 +178,32 @@ code { font-family: var(--mono); font-size: 0.92em; } font: inherit; font-size: 13px; color: var(--fg); - background: - linear-gradient(180deg, - color-mix(in oklab, var(--panel), white 40%) 0%, - var(--panel) 50%, - color-mix(in oklab, var(--panel), var(--fg) 6%) 100%); - border: 1px solid color-mix(in oklab, var(--border) 70%, var(--fg) 30%); - border-radius: 8px; + background: var(--panel); + border: 1px solid var(--border); + border-radius: 0; padding: 4px 8px; - box-shadow: inset 0 1px 0 light-dark(rgba(255, 255, 255, .8), rgba(255, 255, 255, .12)), 0 1px 2px rgba(0, 0, 0, .1); } .segmented { display: inline-flex; - border: 1px solid color-mix(in oklab, var(--border) 70%, var(--fg) 30%); - border-radius: 9px; + border: 1px solid var(--border); overflow: hidden; - background: color-mix(in oklab, var(--panel-2), var(--fg) 6%); - box-shadow: inset 0 1px 3px rgba(0, 0, 0, .12); - padding: 2px; - gap: 2px; + background: var(--panel); } .segmented .seg { border: 0; + border-right: 1px solid var(--border-soft); background: transparent; font: inherit; font-size: 12px; padding: 4px 14px; cursor: pointer; color: var(--muted); - border-radius: 7px; - transition: background .15s ease, color .15s ease, box-shadow .15s ease; -} -.segmented .seg:hover { color: var(--fg); background: color-mix(in oklab, var(--panel), transparent 35%); } -.segmented .seg.active { - background: - linear-gradient(180deg, - color-mix(in oklab, var(--accent), white 22%) 0%, - var(--accent) 55%, - color-mix(in oklab, var(--accent), black 10%) 100%); - color: #fff; - box-shadow: inset 0 1px 0 rgba(255, 255, 255, .35), 0 1px 4px color-mix(in oklab, var(--accent) 50%, transparent); - text-shadow: 0 1px 1px rgba(0, 0, 0, .25); + transition: background .15s ease, color .15s ease; } +.segmented .seg:last-child { border-right: 0; } +.segmented .seg:hover { color: var(--fg); background: var(--panel-2); } +.segmented .seg.active { background: var(--accent); color: #fff; } /* ---------------------------------------------------------------- layout */ #layout { display: flex; flex: 1 1 auto; min-height: 0; } @@ -336,7 +246,7 @@ body.sidebar-off #sidebar { display: none; } border: 1px solid var(--border); background: var(--panel); color: var(--accent-dark); - border-radius: 10px; + border-radius: 0; padding: 1px 8px; cursor: pointer; } @@ -686,7 +596,7 @@ body.no-gutter #gutter { display: none; } height: 16px; line-height: 15px; text-align: center; - border-radius: 3px; + border-radius: 0; font-size: 10px; } .tab-close:hover { background: var(--danger); color: #fff; } @@ -731,7 +641,7 @@ body.no-gutter #gutter { display: none; } color: var(--muted); cursor: pointer; padding: 0 4px; - border-radius: 3px; + border-radius: 0; visibility: hidden; } .tree-row:hover .tree-menu, .tree-row.active .tree-menu { visibility: visible; } @@ -1861,7 +1771,7 @@ html[data-theme="carbon-paper"] #revisions-list li:hover { background: #e6e5dd; font-size: 11px; color: var(--muted); padding: 1px 4px; - border-radius: 4px; + border-radius: 0; } .ftree-act:hover { background: var(--accent); color: #fff; } .files-list { diff --git a/web/sw.js b/web/sw.js index 32d1046..a069def 100644 --- a/web/sw.js +++ b/web/sw.js @@ -1,7 +1,7 @@ /* Service Worker do Notas — caches versionados. * BUMP de CACHE em todo deploy que mude shell/assets (o activate limpa os antigos). */ -const CACHE = 'notas-shell-v11'; +const CACHE = 'notas-shell-v12'; const SHELL = [ '/', '/css/app.css',