Skip to content
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
e8c2474
Move custom insets declaration to global css
adjogima Jan 7, 2026
5891345
Use custom insets instead of env values
adjogima Jan 7, 2026
8508f13
Hide the content of the header instead the header itself
adjogima Jan 7, 2026
241ce9f
Tweak the top corners of the container on the card perma
adjogima Jan 7, 2026
268c643
Merge branch 'main' into mobile/prepare-webviews-2
adjogima Jan 9, 2026
8bf2397
Don't make all buttons bigger on mobile
adjogima Jan 9, 2026
fb0ee93
Don't max-height lists in settings on mobile
adjogima Jan 9, 2026
4a3e560
Fix sticky activity headers for iOS
adjogima Jan 9, 2026
d9759ef
Merge branch 'main' into mobile/prepare-webviews-2
adjogima Jan 14, 2026
161925a
Merge branch 'main' into mobile/prepare-webviews-2
adjogima Jan 20, 2026
3a685ca
Hide filters by default on mobile
adjogima Jan 20, 2026
8c5ce34
Remove keyboard shortcut from input's placeholder on mobile
adjogima Jan 20, 2026
7e84e44
Support system font sizes on iOS
adjogima Jan 20, 2026
4519d75
Bump filters font-size on Android
adjogima Jan 20, 2026
ff9e617
Merge branch 'main' into mobile/prepare-webviews-2
adjogima Jan 22, 2026
97a1c29
Use bottom inset
adjogima Jan 23, 2026
65b2db0
Add vertically compact layout for touch keyboard devices
adjogima Jan 23, 2026
764eb89
Tweak orientation helper to prevent popups from going off screen
adjogima Jan 23, 2026
39575a0
Fix lightbox layout and focus
adjogima Jan 23, 2026
e5bef41
Refactor orientation helper to express intent more clearly
adjogima Jan 27, 2026
70fc2a8
Clean iOS text size CSS
adjogima Jan 27, 2026
fefb288
Merge branch 'main' into mobile/prepare-webviews-2
adjogima Jan 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions app/assets/stylesheets/_global.css
Original file line number Diff line number Diff line change
@@ -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);
Expand Down
13 changes: 3 additions & 10 deletions app/assets/stylesheets/buttons.css
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand All @@ -125,7 +120,7 @@
inline-size: var(--btn-size);

kbd,
span:last-of-type {
span:last-of-type:not(.icon) {
display: none;
}
}
Expand Down Expand Up @@ -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;
}
Expand Down
16 changes: 10 additions & 6 deletions app/assets/stylesheets/events.css
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
Expand All @@ -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;

Expand Down
2 changes: 1 addition & 1 deletion app/assets/stylesheets/header.css
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
10 changes: 10 additions & 0 deletions app/assets/stylesheets/ios.css
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
}
4 changes: 2 additions & 2 deletions app/assets/stylesheets/layout.css
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down
18 changes: 11 additions & 7 deletions app/assets/stylesheets/native.css
Original file line number Diff line number Diff line change
@@ -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 {
Expand All @@ -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 {
Expand All @@ -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
/* ------------------------------------------------------------------------ */

Expand Down
4 changes: 3 additions & 1 deletion app/assets/stylesheets/settings.css
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion app/helpers/application_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion app/helpers/boards_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion app/helpers/webhooks_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion app/views/boards/show/menu/_columns.html.erb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<div class="cards__new-column" data-controller="dialog" data-action="keydown.esc->dialog#close click@document->dialog#closeOnClickOutside" data-turbo-permanent>
<button class="btn btn--circle txt-x-small borderless" data-controller="tooltip" data-action="click->dialog#open:stop">
<button class="btn btn--circle btn--circle-mobile txt-x-small borderless" data-controller="tooltip" data-action="click->dialog#open:stop">
<%= icon_tag "add", class: "translucent" %>
<span class="for-screen-reader">Add a column</span>
</button>
Expand Down
4 changes: 2 additions & 2 deletions app/views/cards/container/_gild.html.erb
Original file line number Diff line number Diff line change
@@ -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" %>
<span class="for-screen-reader">Demote to normal (shift+g)</span>
<% 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" %>
<span class="for-screen-reader">Promote to Golden Ticket (shift+g)</span>
<% end %>
Expand Down
2 changes: 1 addition & 1 deletion app/views/cards/container/_image.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<% end %>
<% elsif !card.closed? %>
<%= form_with model: card, data: { controller: "form" } do |form| %>
<label class="card-perma__image-btn btn input--file" data-controller="tooltip">
<label class="card-perma__image-btn btn input--file btn--circle-mobile" data-controller="tooltip">
<%= icon_tag "picture-add" %>
<span class="for-screen-reader">Add background image</span>

Expand Down
4 changes: 2 additions & 2 deletions app/views/cards/pins/_pin_button.html.erb
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
<div id="<%= dom_id(card, :pin_button) %>">
<% if card.pinned_by? Current.user %>
<%= button_to card_pin_path(card), method: :delete, class: "btn btn--reversed", data: { controller: "tooltip hotkey", action: "keydown.shift+p@document->hotkey#click" } do %>
<%= button_to card_pin_path(card), method: :delete, class: "btn btn--reversed btn--circle-mobile", data: { controller: "tooltip hotkey", action: "keydown.shift+p@document->hotkey#click" } do %>
<%= icon_tag "pinned" %> <span class="for-screen-reader">Un-pin this card (shift+p)</span>
<% end %>
<% else %>
<%= button_to card_pin_path(card), class: "btn", data: { controller: "tooltip hotkey", action: "keydown.shift+p@document->hotkey#click" } do %>
<%= button_to card_pin_path(card), class: "btn btn--circle-mobile", data: { controller: "tooltip hotkey", action: "keydown.shift+p@document->hotkey#click" } do %>
<%= icon_tag "unpinned" %> <span class="for-screen-reader">Pin this card (shift+p)</span>
<% end %>
<% end %>
Expand Down
4 changes: 2 additions & 2 deletions app/views/cards/watches/_watch_button.html.erb
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
<div id="<%= dom_id(card, :watch_button) %>">
<% if card.watched_by? Current.user %>
<%= button_to card_watch_path(card), method: :delete, class: "btn btn--reversed", data: { controller: "tooltip hotkey", action: "keydown.shift+n@document->hotkey#click" } do %>
<%= button_to card_watch_path(card), method: :delete, class: "btn btn--reversed btn--circle-mobile", data: { controller: "tooltip hotkey", action: "keydown.shift+n@document->hotkey#click" } do %>
<%= icon_tag "bell" %>
<span class="for-screen-reader">Stop watching (shift+n)</span>
<% end %>
<% else %>
<%= button_to card_watch_path(card), class: "btn", data: { controller: "tooltip hotkey", action: "keydown.shift+n@document->hotkey#click" } do %>
<%= button_to card_watch_path(card), class: "btn btn--circle-mobile", data: { controller: "tooltip hotkey", action: "keydown.shift+n@document->hotkey#click" } do %>
<%= icon_tag "bell-off" %>
<span class="for-screen-reader">Watch this (shift+n)</span>
<% end %>
Expand Down
2 changes: 1 addition & 1 deletion app/views/notifications/index.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<h1 class="header__title"><%= @page_title %></h1>

<div class="header__actions header__actions--end">
<%= link_to notifications_settings_path, class: "btn" do %>
<%= link_to notifications_settings_path, class: "btn btn--circle-mobile" do %>
<%= icon_tag "settings" %> <span class="for-screen-reader">Notification settings</span>
<% end %>
</div>
Expand Down