diff --git a/app/assets/stylesheets/_global.css b/app/assets/stylesheets/_global.css index 24e5b87279..13975ae62d 100644 --- a/app/assets/stylesheets/_global.css +++ b/app/assets/stylesheets/_global.css @@ -1,6 +1,12 @@ @layer reset, base, components, modules, utilities, native, platform; :root { + /* Insets - The mobile apps may inject their own custom insets based on native elements on screen, like a floating navigation */ + --custom-safe-inset-top: var(--injected-safe-inset-top, env(safe-area-inset-top, 0px)); + --custom-safe-inset-right: var(--injected-safe-inset-right, env(safe-area-inset-right, 0px)); + --custom-safe-inset-bottom: var(--injected-safe-inset-bottom, env(safe-area-inset-bottom, 0px)); + --custom-safe-inset-left: var(--injected-safe-inset-left, env(safe-area-inset-left, 0px)); + /* Spacing */ --inline-space: 1ch; --inline-space-half: calc(var(--inline-space) / 2); diff --git a/app/assets/stylesheets/buttons.css b/app/assets/stylesheets/buttons.css index ac897184fa..89638fc12d 100644 --- a/app/assets/stylesheets/buttons.css +++ b/app/assets/stylesheets/buttons.css @@ -107,11 +107,6 @@ > * { grid-area: 1/1; } - - @media (max-width: 639px) { - --btn-size: 3em; - --icon-size: 75%; - } } /* Make a normal button circular on mobile */ @@ -125,7 +120,7 @@ inline-size: var(--btn-size); kbd, - span:last-of-type { + span:last-of-type:not(.icon) { display: none; } } @@ -224,17 +219,15 @@ .btn--back { --btn-border-size: 0; - font-size: var(--text-medium); - @media (max-width: 639px) { - padding: 0.5em; - strong, kbd { display: none; } } @media (min-width: 640px) { + font-size: var(--text-medium); + .icon--arrow-left { display: none; } diff --git a/app/assets/stylesheets/events.css b/app/assets/stylesheets/events.css index 73e446185f..291d2ca47e 100644 --- a/app/assets/stylesheets/events.css +++ b/app/assets/stylesheets/events.css @@ -220,14 +220,14 @@ .events__column-header { background-color: var(--color-canvas); grid-row-start: 1; - inset-block-start: calc(var(--block-space) * -1); - margin-block-end: var(--events-gap); - padding-block: calc(var(--events-gap) * 3) var(--events-gap); + inset-block-start: var(--custom-safe-inset-top); + margin-block: calc(var(--events-gap) * 2) var(--events-gap); + padding-block: var(--events-gap); position: sticky; z-index: var(--z-events-column-header); @media (max-width: 639px) { - margin-inline: calc(var(--main-padding) * -1); + margin-inline: calc(var(--main-padding) * -0.5); padding-inline: var(--main-padding); } } @@ -239,12 +239,16 @@ } .events__maximize-button { - inset: calc(var(--events-gap) * 3) 0 auto auto; + inset: 50% var(--events-gap) auto auto; outline-offset: -2px; position: absolute; - transform: translateY(-10%); + transform: translateY(-50%); z-index: 1; + @media (max-width: 639px) { + inset-inline-end: 0; + } + @media (any-hover: hover ) { opacity: 0; diff --git a/app/assets/stylesheets/header.css b/app/assets/stylesheets/header.css index 5a3c7ee835..c54636d131 100644 --- a/app/assets/stylesheets/header.css +++ b/app/assets/stylesheets/header.css @@ -13,7 +13,7 @@ "menu menu menu" "actions-start title actions-end"; max-inline-size: 100dvw; - padding-block: calc(var(--block-space-half) + env(safe-area-inset-top)) var(--block-space-half); + padding-block: calc(var(--block-space-half) + var(--custom-safe-inset-top)) var(--block-space-half); padding-inline: var(--main-padding); position: relative; z-index: var(--z-nav); diff --git a/app/assets/stylesheets/ios.css b/app/assets/stylesheets/ios.css index 3a05e5956b..6bd68634fe 100644 --- a/app/assets/stylesheets/ios.css +++ b/app/assets/stylesheets/ios.css @@ -3,5 +3,15 @@ .hide-on-ios { display: none; } + + /* Events + /* ------------------------------------------------------------------------ */ + + .events__column-header { + -webkit-backdrop-filter: blur(16px); + backdrop-filter: blur(16px); + background-color: oklch(from var(--color-canvas) l c h / 0.5); + border-radius: 10em; + } } } diff --git a/app/assets/stylesheets/layout.css b/app/assets/stylesheets/layout.css index 6ea479eb64..ef65d7b6b6 100644 --- a/app/assets/stylesheets/layout.css +++ b/app/assets/stylesheets/layout.css @@ -23,8 +23,8 @@ margin-inline: auto; max-inline-size: 100dvw; padding-inline: - calc(var(--main-padding) + env(safe-area-inset-left)) - calc(var(--main-padding) + env(safe-area-inset-right)); + calc(var(--main-padding) + var(--custom-safe-inset-left)) + calc(var(--main-padding) + var(--custom-safe-inset-right)); text-align: center; } diff --git a/app/assets/stylesheets/native.css b/app/assets/stylesheets/native.css index 96df0e00ba..17129a9159 100644 --- a/app/assets/stylesheets/native.css +++ b/app/assets/stylesheets/native.css @@ -1,11 +1,5 @@ @layer native { [data-platform~=native] { - /* The mobile apps may inject their own custom insets based on native elements on screen, like a floating navigation */ - --custom-safe-inset-top: var(--injected-safe-inset-top, env(safe-area-inset-top, 0px)); - --custom-safe-inset-right: var(--injected-safe-inset-right, env(safe-area-inset-right, 0px)); - --custom-safe-inset-bottom: var(--injected-safe-inset-bottom, env(safe-area-inset-bottom, 0px)); - --custom-safe-inset-left: var(--injected-safe-inset-left, env(safe-area-inset-left, 0px)); - -webkit-tap-highlight-color: transparent; .hide-on-native { @@ -19,7 +13,12 @@ :not(:has(.header__title, .header__actions)), :not(:has(.header__title, .header__actions--end)):has(.header__actions--start .btn--back:only-child) ) { - display: none; + block-size: var(--custom-safe-inset-top); + padding: unset; + + * { + display: none; + } } .header__actions { @@ -35,6 +34,11 @@ margin-block-start: 0; } + .card-perma__bg { + border-start-start-radius: calc(0.2em + clamp(0.25rem, 2vw, var(--padding-block))); + border-start-end-radius: calc(0.2em + clamp(0.25rem, 2vw, var(--padding-block))); + } + /* Search /* ------------------------------------------------------------------------ */ diff --git a/app/assets/stylesheets/settings.css b/app/assets/stylesheets/settings.css index cd67a4cc0e..0f1822a234 100644 --- a/app/assets/stylesheets/settings.css +++ b/app/assets/stylesheets/settings.css @@ -29,7 +29,9 @@ } .settings__panel--users { - max-height: 80dvh; + @media (min-width: 640px) { + max-height: 80dvh; + } @media (min-width: 960px) { max-height: calc(100dvh - 12rem); diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 946a0900e5..9e0a72f813 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -11,7 +11,7 @@ def icon_tag(name, **options) end def back_link_to(label, url, action, **options) - link_to url, class: "btn btn--back", data: { controller: "hotkey", action: action }, **options do + link_to url, class: "btn btn--back btn--circle-mobile", data: { controller: "hotkey", action: action }, **options do icon_tag("arrow-left") + tag.strong("Back to #{label}", class: "overflow-ellipsis") + tag.kbd("ESC", class: "txt-x-small hide-on-touch").html_safe end end diff --git a/app/helpers/boards_helper.rb b/app/helpers/boards_helper.rb index a1960b3410..4ed22dc032 100644 --- a/app/helpers/boards_helper.rb +++ b/app/helpers/boards_helper.rb @@ -4,7 +4,7 @@ def link_back_to_board(board) end def link_to_edit_board(board) - link_to edit_board_path(board), class: "btn", data: { controller: "tooltip" } do + link_to edit_board_path(board), class: "btn btn--circle-mobile", data: { controller: "tooltip" } do icon_tag("settings") + tag.span("Settings for #{board.name}", class: "for-screen-reader") end end diff --git a/app/helpers/webhooks_helper.rb b/app/helpers/webhooks_helper.rb index f3bb077c83..dea0ea9bd9 100644 --- a/app/helpers/webhooks_helper.rb +++ b/app/helpers/webhooks_helper.rb @@ -24,7 +24,7 @@ def webhook_action_label(action) def link_to_webhooks(board, &) link_to board_webhooks_path(board_id: board), - class: [ "btn", { "btn--reversed": board.webhooks.any? } ], + class: [ "btn btn--circle-mobile", { "btn--reversed": board.webhooks.any? } ], data: { controller: "tooltip" } do icon_tag("world") + tag.span("Webhooks", class: "for-screen-reader") end diff --git a/app/views/boards/show/menu/_columns.html.erb b/app/views/boards/show/menu/_columns.html.erb index 017527a43c..b227b72efe 100644 --- a/app/views/boards/show/menu/_columns.html.erb +++ b/app/views/boards/show/menu/_columns.html.erb @@ -1,5 +1,5 @@
- diff --git a/app/views/cards/container/_gild.html.erb b/app/views/cards/container/_gild.html.erb index 7647a3b4ff..a54895a459 100644 --- a/app/views/cards/container/_gild.html.erb +++ b/app/views/cards/container/_gild.html.erb @@ -1,10 +1,10 @@ <% if card.golden? %> - <%= button_to card_goldness_path(card), method: :delete, class: "btn btn--reversed", data: { controller: "tooltip hotkey", action: "keydown.shift+g@document->hotkey#click" } do %> + <%= button_to card_goldness_path(card), method: :delete, class: "btn btn--reversed btn--circle-mobile", data: { controller: "tooltip hotkey", action: "keydown.shift+g@document->hotkey#click" } do %> <%= icon_tag "golden-ticket" %> Demote to normal (shift+g) <% end %> <% else %> - <%= button_to card_goldness_path(card), class: "btn", data: { controller: "tooltip hotkey", action: "keydown.shift+g@document->hotkey#click" } do %> + <%= button_to card_goldness_path(card), class: "btn btn--circle-mobile", data: { controller: "tooltip hotkey", action: "keydown.shift+g@document->hotkey#click" } do %> <%= icon_tag "golden-ticket" %> Promote to Golden Ticket (shift+g) <% end %> diff --git a/app/views/cards/container/_image.html.erb b/app/views/cards/container/_image.html.erb index 6f0fceea0e..87287cafea 100644 --- a/app/views/cards/container/_image.html.erb +++ b/app/views/cards/container/_image.html.erb @@ -5,7 +5,7 @@ <% end %> <% elsif !card.closed? %> <%= form_with model: card, data: { controller: "form" } do |form| %> -