Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
55b8e438ad | ||
|
|
1607a22f0c | ||
|
|
8a5dfef41a | ||
|
|
1a610eaac4 | ||
|
|
c2d4ce0179 | ||
|
|
a1b8cc6ddc | ||
|
|
8a2c46f5ea | ||
|
|
8d42f34065 |
|
Before Width: | Height: | Size: 248 KiB After Width: | Height: | Size: 248 KiB |
|
Before Width: | Height: | Size: 308 KiB After Width: | Height: | Size: 308 KiB |
|
Before Width: | Height: | Size: 228 KiB After Width: | Height: | Size: 228 KiB |
|
Before Width: | Height: | Size: 147 KiB After Width: | Height: | Size: 148 KiB |
|
Before Width: | Height: | Size: 333 KiB After Width: | Height: | Size: 334 KiB |
|
Before Width: | Height: | Size: 245 KiB After Width: | Height: | Size: 245 KiB |
|
Before Width: | Height: | Size: 282 KiB After Width: | Height: | Size: 284 KiB |
|
Before Width: | Height: | Size: 370 KiB After Width: | Height: | Size: 370 KiB |
|
Before Width: | Height: | Size: 356 KiB After Width: | Height: | Size: 355 KiB |
|
Before Width: | Height: | Size: 229 KiB After Width: | Height: | Size: 231 KiB |
|
Before Width: | Height: | Size: 253 KiB After Width: | Height: | Size: 253 KiB |
|
Before Width: | Height: | Size: 238 KiB After Width: | Height: | Size: 245 KiB |
|
Before Width: | Height: | Size: 243 KiB After Width: | Height: | Size: 246 KiB |
|
Before Width: | Height: | Size: 243 KiB After Width: | Height: | Size: 245 KiB |
|
Before Width: | Height: | Size: 218 KiB After Width: | Height: | Size: 217 KiB |
|
Before Width: | Height: | Size: 227 KiB After Width: | Height: | Size: 227 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 63 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
@@ -242,6 +242,7 @@
|
|||||||
--note-on-ink: #1e1e1e; /* dark text on the gold */
|
--note-on-ink: #1e1e1e; /* dark text on the gold */
|
||||||
--nav-active-ink: #1e1e1e; /* dark text on the amber menu item */
|
--nav-active-ink: #1e1e1e; /* dark text on the amber menu item */
|
||||||
--heading-ink: #8a8e90; /* PROJEKTER and the group names — quiet grey */
|
--heading-ink: #8a8e90; /* PROJEKTER and the group names — quiet grey */
|
||||||
|
--note-group-bg: #2d3133; /* day separators take the menu's resting grey, not the darker ground */
|
||||||
|
|
||||||
--p1: #cf6b6b;
|
--p1: #cf6b6b;
|
||||||
--p2: #d69f5c;
|
--p2: #d69f5c;
|
||||||
|
|||||||
@@ -228,13 +228,21 @@
|
|||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
padding: var(--s3) var(--s2);
|
padding: var(--s3) var(--s2);
|
||||||
border-bottom: 1px solid var(--line);
|
border-bottom: 1px solid var(--line);
|
||||||
|
border-radius: var(--radius);
|
||||||
transition:
|
transition:
|
||||||
opacity var(--medium) var(--ease),
|
opacity var(--medium) var(--ease),
|
||||||
transform var(--medium) var(--ease);
|
transform var(--medium) var(--ease);
|
||||||
}
|
}
|
||||||
|
|
||||||
.row:hover {
|
/* Hover only where there is a real pointer. On a touch screen a :hover on the tap
|
||||||
background: var(--surface);
|
target makes iOS spend the first tap applying the hover and only open on the
|
||||||
|
second — the "double-tap" on iPhone. With no hover to apply, the first tap opens
|
||||||
|
the task. The rounded corners are on the row itself, so the highlight is a
|
||||||
|
rounded box like a note in the list. */
|
||||||
|
@media (hover: hover) {
|
||||||
|
.row:hover {
|
||||||
|
background: var(--surface);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The exit: a short lift and fade, so completing something reads as the task
|
/* The exit: a short lift and fade, so completing something reads as the task
|
||||||
|
|||||||
@@ -707,7 +707,10 @@
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div class="notes">
|
<!-- `has-note` drives the phone layout: one column, showing the list until a note
|
||||||
|
is opened and the editor once one is. On a wide screen both are always up and
|
||||||
|
the class does nothing. -->
|
||||||
|
<div class="notes" class:has-note={selectedId}>
|
||||||
<aside>
|
<aside>
|
||||||
<div class="head">
|
<div class="head">
|
||||||
<h1>{t('notes.title')}</h1>
|
<h1>{t('notes.title')}</h1>
|
||||||
@@ -916,7 +919,15 @@
|
|||||||
</aside>
|
</aside>
|
||||||
|
|
||||||
<section class="editor">
|
<section class="editor">
|
||||||
{#if selected}
|
{#if selectedId}
|
||||||
|
<!-- Keyed on the id, which is set the instant a row is tapped — not on the
|
||||||
|
loaded note, which arrives a moment later. On a phone that moment was the
|
||||||
|
whole bug: the pane did not switch until the body had loaded, so the first
|
||||||
|
tap looked like nothing and people tapped again. -->
|
||||||
|
<!-- Phone only (hidden on a wide screen by CSS): the way back to the list,
|
||||||
|
since there the editor fills the screen and the list is not beside it. -->
|
||||||
|
<button class="back" onclick={() => open(null)}>‹ {t('notes.title')}</button>
|
||||||
|
{#if selected}
|
||||||
<NoteEditor
|
<NoteEditor
|
||||||
note={selected}
|
note={selected}
|
||||||
notes={notes}
|
notes={notes}
|
||||||
@@ -1050,6 +1061,12 @@
|
|||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
{:else}
|
||||||
|
<!-- Chosen, but its full text is still loading. Keep the pane (so the tap
|
||||||
|
felt like it landed) and stay quiet — the "pick a note" line is for
|
||||||
|
when nothing is chosen at all, not for this half-second. -->
|
||||||
|
<p class="empty" aria-busy="true"></p>
|
||||||
|
{/if}
|
||||||
{:else}
|
{:else}
|
||||||
<p class="empty">{t('notes.pickOne')}</p>
|
<p class="empty">{t('notes.pickOne')}</p>
|
||||||
{/if}
|
{/if}
|
||||||
@@ -1389,7 +1406,10 @@
|
|||||||
top: 0;
|
top: 0;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
margin: 0 0 var(--s1);
|
margin: 0 0 var(--s1);
|
||||||
background: var(--ground);
|
/* --ground everywhere but Kul, where the ground is the darkest thing on screen
|
||||||
|
and a day separator on it reads as a dark bar. There it takes the menu's own
|
||||||
|
resting colour instead, via --note-group-bg. */
|
||||||
|
background: var(--note-group-bg, var(--ground));
|
||||||
border-radius: var(--radius);
|
border-radius: var(--radius);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1475,8 +1495,21 @@
|
|||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
.row:hover {
|
/* Pointer only. On a touch screen a :hover on the tap target costs a tap — iOS
|
||||||
background: var(--surface);
|
spends the first applying the hover and opens on the second. Gated, the first
|
||||||
|
tap opens the note. The row's buttons are shown outright on touch below, since
|
||||||
|
there is no hover to reveal them. */
|
||||||
|
@media (hover: hover) {
|
||||||
|
.row:hover {
|
||||||
|
background: var(--surface);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (hover: none) {
|
||||||
|
.star,
|
||||||
|
.archive-one {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.row.on {
|
.row.on {
|
||||||
@@ -1911,14 +1944,48 @@
|
|||||||
font-size: var(--text-sm);
|
font-size: var(--text-sm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* The way back to the list on a phone — an iOS-style "‹ Noter" at the top of the
|
||||||
|
editor. Hidden on a wide screen, where the list is always beside the editor. */
|
||||||
|
.back {
|
||||||
|
display: none;
|
||||||
|
align-self: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
gap: var(--s1);
|
||||||
|
margin-bottom: var(--s2);
|
||||||
|
padding: var(--s1) 0;
|
||||||
|
font-size: var(--text-base);
|
||||||
|
color: var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
@media (max-width: 700px) {
|
@media (max-width: 700px) {
|
||||||
.notes {
|
.notes {
|
||||||
grid-template-columns: 1fr;
|
grid-template-columns: 1fr;
|
||||||
|
padding: 0;
|
||||||
|
gap: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
aside {
|
/* One pane at a time. The two-column card layout has no room on a phone, so
|
||||||
border-right: 0;
|
the list shows until a note is opened and the editor takes over once one is
|
||||||
padding-right: 0;
|
— the back button is the way between them. Without this the editor stacked
|
||||||
|
below a full-height list, so a tapped note opened out of sight. */
|
||||||
|
.notes.has-note aside {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notes:not(.has-note) .editor {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Full-bleed: the card border and rounded corners are for sitting beside
|
||||||
|
another card, and on one column there is nothing beside it. */
|
||||||
|
aside,
|
||||||
|
.editor {
|
||||||
|
border: 0;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back {
|
||||||
|
display: inline-flex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||