@skillcdn/console 0.4.3 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/api.d.ts +3 -3
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +3 -3
- package/dist/api.js.map +1 -1
- package/dist/cli/cli.d.ts.map +1 -1
- package/dist/cli/cli.js +95 -20
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/format.d.ts +4 -2
- package/dist/cli/format.d.ts.map +1 -1
- package/dist/cli/format.js +32 -9
- package/dist/cli/format.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +17 -14
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/plugin-check.d.ts +5 -1
- package/dist/cli/plugin-check.d.ts.map +1 -1
- package/dist/cli/plugin-check.js +23 -4
- package/dist/cli/plugin-check.js.map +1 -1
- package/dist/cli/plugin-cli.d.ts.map +1 -1
- package/dist/cli/plugin-cli.js +10 -1
- package/dist/cli/plugin-cli.js.map +1 -1
- package/dist/cli/plugin-init.d.ts +2 -0
- package/dist/cli/plugin-init.d.ts.map +1 -1
- package/dist/cli/plugin-init.js +6 -0
- package/dist/cli/plugin-init.js.map +1 -1
- package/dist/client.d.ts +4 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +2 -0
- package/dist/client.js.map +1 -1
- package/dist/compat.js +1 -1
- package/dist/components/board.d.ts +8 -0
- package/dist/components/board.d.ts.map +1 -1
- package/dist/components/board.js +3 -3
- package/dist/components/board.js.map +1 -1
- package/dist/components/decision-form.d.ts +6 -0
- package/dist/components/decision-form.d.ts.map +1 -1
- package/dist/components/decision-form.js +23 -5
- package/dist/components/decision-form.js.map +1 -1
- package/dist/components/decision-list.d.ts +5 -1
- package/dist/components/decision-list.d.ts.map +1 -1
- package/dist/components/decision-list.js +25 -5
- package/dist/components/decision-list.js.map +1 -1
- package/dist/components/event-feed.d.ts.map +1 -1
- package/dist/components/event-feed.js +7 -1
- package/dist/components/event-feed.js.map +1 -1
- package/dist/components/goals.d.ts.map +1 -1
- package/dist/components/goals.js +2 -2
- package/dist/components/goals.js.map +1 -1
- package/dist/components/home.d.ts +35 -0
- package/dist/components/home.d.ts.map +1 -0
- package/dist/components/home.js +326 -0
- package/dist/components/home.js.map +1 -0
- package/dist/components/pack-connect.d.ts.map +1 -1
- package/dist/components/pack-connect.js +5 -4
- package/dist/components/pack-connect.js.map +1 -1
- package/dist/components/people.d.ts +2 -0
- package/dist/components/people.d.ts.map +1 -1
- package/dist/components/people.js +15 -2
- package/dist/components/people.js.map +1 -1
- package/dist/components/plugin-frame.d.ts +3 -12
- package/dist/components/plugin-frame.d.ts.map +1 -1
- package/dist/components/plugin-frame.js +53 -20
- package/dist/components/plugin-frame.js.map +1 -1
- package/dist/components/plugin-settings.d.ts.map +1 -1
- package/dist/components/plugin-settings.js +151 -26
- package/dist/components/plugin-settings.js.map +1 -1
- package/dist/components/projects.d.ts +0 -8
- package/dist/components/projects.d.ts.map +1 -1
- package/dist/components/projects.js +1 -13
- package/dist/components/projects.js.map +1 -1
- package/dist/components/task-view.d.ts.map +1 -1
- package/dist/components/task-view.js +2 -1
- package/dist/components/task-view.js.map +1 -1
- package/dist/components/ui.d.ts.map +1 -1
- package/dist/components/ui.js +5 -2
- package/dist/components/ui.js.map +1 -1
- package/dist/connect-page.d.ts.map +1 -1
- package/dist/connect-page.js +5 -6
- package/dist/connect-page.js.map +1 -1
- package/dist/console.css +761 -191
- package/dist/console.d.ts +10 -3
- package/dist/console.d.ts.map +1 -1
- package/dist/console.js +33 -13
- package/dist/console.js.map +1 -1
- package/dist/data.d.ts +4 -2
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +5 -0
- package/dist/data.js.map +1 -1
- package/dist/docs-page.d.ts.map +1 -1
- package/dist/docs-page.js +6 -5
- package/dist/docs-page.js.map +1 -1
- package/dist/home-tiles.d.ts +92 -0
- package/dist/home-tiles.d.ts.map +1 -0
- package/dist/home-tiles.js +294 -0
- package/dist/home-tiles.js.map +1 -0
- package/dist/i18n/en.d.ts +174 -0
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +175 -1
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/index.d.ts +4 -2
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +10 -11
- package/dist/i18n/index.js.map +1 -1
- package/dist/i18n/ko.d.ts.map +1 -1
- package/dist/i18n/ko.js +170 -3
- package/dist/i18n/ko.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/limits.d.ts +6 -0
- package/dist/limits.d.ts.map +1 -1
- package/dist/limits.js +6 -0
- package/dist/limits.js.map +1 -1
- package/dist/plugin/bridge.d.ts +44 -3
- package/dist/plugin/bridge.d.ts.map +1 -1
- package/dist/plugin/bridge.js +26 -0
- package/dist/plugin/bridge.js.map +1 -1
- package/dist/plugin/capabilities.d.ts +7 -1
- package/dist/plugin/capabilities.d.ts.map +1 -1
- package/dist/plugin/capabilities.js +14 -1
- package/dist/plugin/capabilities.js.map +1 -1
- package/dist/plugin/context.d.ts +18 -1
- package/dist/plugin/context.d.ts.map +1 -1
- package/dist/plugin/define.d.ts +1 -0
- package/dist/plugin/define.d.ts.map +1 -1
- package/dist/plugin/define.js +1 -1
- package/dist/plugin/define.js.map +1 -1
- package/dist/plugin/limits.d.ts +5 -2
- package/dist/plugin/limits.d.ts.map +1 -1
- package/dist/plugin/limits.js +5 -2
- package/dist/plugin/limits.js.map +1 -1
- package/dist/plugin/manifest.d.ts +83 -6
- package/dist/plugin/manifest.d.ts.map +1 -1
- package/dist/plugin/manifest.js +111 -7
- package/dist/plugin/manifest.js.map +1 -1
- package/dist/plugin/rest-schemas.d.ts +76 -0
- package/dist/plugin/rest-schemas.d.ts.map +1 -1
- package/dist/plugin/rest-schemas.js +23 -2
- package/dist/plugin/rest-schemas.js.map +1 -1
- package/dist/plugin/sandbox.d.ts +4 -3
- package/dist/plugin/sandbox.d.ts.map +1 -1
- package/dist/plugin/sandbox.js +33 -6
- package/dist/plugin/sandbox.js.map +1 -1
- package/dist/plugin/semver.d.ts +26 -0
- package/dist/plugin/semver.d.ts.map +1 -0
- package/dist/plugin/semver.js +76 -0
- package/dist/plugin/semver.js.map +1 -0
- package/dist/plugin/testing.d.ts.map +1 -1
- package/dist/plugin/testing.js +2 -1
- package/dist/plugin/testing.js.map +1 -1
- package/dist/plugin/web.d.ts +10 -1
- package/dist/plugin/web.d.ts.map +1 -1
- package/dist/plugin/web.js +34 -0
- package/dist/plugin/web.js.map +1 -1
- package/dist/plugin.d.ts +3 -2
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +3 -2
- package/dist/plugin.js.map +1 -1
- package/dist/rules.d.ts +2 -2
- package/dist/rules.js +3 -3
- package/dist/schemas.d.ts +497 -2
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +96 -9
- package/dist/schemas.js.map +1 -1
- package/dist/use-action.d.ts +8 -2
- package/dist/use-action.d.ts.map +1 -1
- package/dist/use-action.js +13 -6
- package/dist/use-action.js.map +1 -1
- package/dist/vocabulary.d.ts +3 -1
- package/dist/vocabulary.d.ts.map +1 -1
- package/dist/vocabulary.js +3 -0
- package/dist/vocabulary.js.map +1 -1
- package/docs/specs/cli.md +4 -3
- package/docs/specs/plugins.md +46 -33
- package/docs/specs/rest.md +16 -15
- package/package.json +1 -1
- package/skills/building-a-plugin/SKILL.md +8 -7
- package/skills/planning-the-board/references/setting-up.md +2 -1
- package/skills/working-the-board/SKILL.md +3 -3
- package/src/api.ts +6 -0
- package/src/cli/cli.ts +124 -19
- package/src/cli/format.ts +42 -9
- package/src/cli/help.ts +17 -13
- package/src/cli/plugin-check.ts +41 -2
- package/src/cli/plugin-cli.ts +10 -1
- package/src/cli/plugin-init.ts +8 -0
- package/src/client.ts +8 -0
- package/src/compat.ts +1 -1
- package/src/components/board.tsx +3 -3
- package/src/components/decision-form.tsx +75 -19
- package/src/components/decision-list.tsx +45 -13
- package/src/components/event-feed.tsx +7 -1
- package/src/components/goals.tsx +4 -1
- package/src/components/home.tsx +615 -0
- package/src/components/pack-connect.tsx +5 -4
- package/src/components/people.tsx +136 -54
- package/src/components/plugin-frame.tsx +62 -63
- package/src/components/plugin-settings.tsx +428 -87
- package/src/components/projects.tsx +0 -55
- package/src/components/task-view.tsx +7 -0
- package/src/components/ui.tsx +6 -2
- package/src/connect-page.tsx +5 -6
- package/src/console.tsx +80 -30
- package/src/data.ts +9 -2
- package/src/docs-page.tsx +6 -5
- package/src/home-tiles.ts +438 -0
- package/src/i18n/en.ts +178 -0
- package/src/i18n/index.ts +17 -14
- package/src/i18n/ko.ts +174 -3
- package/src/index.ts +7 -5
- package/src/limits.ts +6 -0
- package/src/plugin/bridge.ts +77 -1
- package/src/plugin/capabilities.ts +17 -1
- package/src/plugin/context.ts +18 -1
- package/src/plugin/define.ts +4 -1
- package/src/plugin/limits.ts +5 -2
- package/src/plugin/manifest.ts +154 -10
- package/src/plugin/rest-schemas.ts +27 -1
- package/src/plugin/sandbox.ts +36 -8
- package/src/plugin/semver.ts +89 -0
- package/src/plugin/testing.ts +2 -1
- package/src/plugin/web.ts +49 -0
- package/src/plugin.ts +18 -0
- package/src/rules.ts +3 -3
- package/src/schemas.ts +118 -10
- package/src/styles/console.css +761 -191
- package/src/use-action.ts +16 -7
- package/src/vocabulary.ts +4 -0
- package/template/plugin/console-plugin.json +3 -1
package/src/styles/console.css
CHANGED
|
@@ -465,7 +465,9 @@ table {
|
|
|
465
465
|
align-items: center;
|
|
466
466
|
gap: var(--sc-space-2);
|
|
467
467
|
padding: var(--sc-space-2) 0 var(--sc-space-3);
|
|
468
|
+
border: 0;
|
|
468
469
|
border-bottom: 2px solid transparent;
|
|
470
|
+
background: none;
|
|
469
471
|
color: var(--sc-color-text-muted);
|
|
470
472
|
font-size: var(--sc-text-sm);
|
|
471
473
|
font-weight: var(--sc-weight-medium);
|
|
@@ -506,14 +508,44 @@ table {
|
|
|
506
508
|
top: 100%;
|
|
507
509
|
}
|
|
508
510
|
|
|
509
|
-
/* The
|
|
511
|
+
/* The pages of a plugin: the header's tabs going on a row lower, on the same gutters, the line
|
|
512
|
+
under them where the page begins. The line is a shadow, so that the current tab's underline lies
|
|
513
|
+
on it, as the header's does on its own line, in a row that scrolls sideways. */
|
|
514
|
+
.sc-page-tabs {
|
|
515
|
+
display: flex;
|
|
516
|
+
flex: none;
|
|
517
|
+
gap: var(--sc-space-5);
|
|
518
|
+
margin: calc(var(--sc-main-top) * -1) calc(var(--sc-main-side) * -1) var(--sc-space-5);
|
|
519
|
+
padding: var(--sc-space-1) var(--sc-main-side) 0;
|
|
520
|
+
background: color-mix(in srgb, var(--sc-color-bg) 45%, transparent);
|
|
521
|
+
box-shadow: inset 0 -1px 0 var(--sc-color-border);
|
|
522
|
+
overflow: auto hidden;
|
|
523
|
+
scrollbar-width: none;
|
|
524
|
+
}
|
|
510
525
|
|
|
526
|
+
/* The views within a page, as a plugin has in its frame: the console's view switch, in a tab's
|
|
527
|
+
words, so that the row reads as a level below the tabs. What stands around it is the page's. */
|
|
511
528
|
.sc-subtabs {
|
|
512
529
|
display: flex;
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
530
|
+
flex-wrap: wrap;
|
|
531
|
+
gap: var(--sc-space-1);
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
.sc-subtabs .sc-tab {
|
|
535
|
+
padding: var(--sc-space-1) var(--sc-space-3);
|
|
536
|
+
border-bottom: 0;
|
|
537
|
+
border-radius: var(--sc-radius-full);
|
|
538
|
+
cursor: pointer;
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
.sc-subtabs .sc-tab:hover {
|
|
542
|
+
background: var(--sc-color-bg-inset);
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
.sc-subtabs .sc-tab-current {
|
|
546
|
+
background: var(--sc-color-bg-raised);
|
|
547
|
+
box-shadow: 0 0 0 1px var(--sc-color-border);
|
|
548
|
+
color: var(--sc-color-text);
|
|
517
549
|
}
|
|
518
550
|
|
|
519
551
|
/* A plugin's frame: the width of the page, as tall as the frame says. */
|
|
@@ -527,6 +559,14 @@ table {
|
|
|
527
559
|
background: transparent;
|
|
528
560
|
}
|
|
529
561
|
|
|
562
|
+
/* A page pads itself by a step, for the shadows of what is in it, which the frame would cut. The
|
|
563
|
+
frame stands that step outside the page's column, so that the page's first words line up with
|
|
564
|
+
the tabs above it, and with every other page's. */
|
|
565
|
+
.sc-plugin-frame-page {
|
|
566
|
+
width: calc(100% + 2 * var(--sc-space-4));
|
|
567
|
+
margin: calc(var(--sc-space-4) * -1);
|
|
568
|
+
}
|
|
569
|
+
|
|
530
570
|
/* A plugin's frame document, which the console serves marked with data-console: it paints no
|
|
531
571
|
background and is as tall as its content, so that the box the console draws shows through and
|
|
532
572
|
the frame shrinks as well as grows; no room is kept for a scrollbar it never shows. */
|
|
@@ -541,50 +581,11 @@ html[data-console] body {
|
|
|
541
581
|
background: transparent;
|
|
542
582
|
}
|
|
543
583
|
|
|
544
|
-
/*
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
.sc-widgets {
|
|
548
|
-
display: grid;
|
|
549
|
-
grid-template-columns: repeat(6, minmax(0, 1fr));
|
|
550
|
-
gap: var(--sc-space-4);
|
|
551
|
-
}
|
|
552
|
-
|
|
553
|
-
.sc-widgets-top {
|
|
554
|
-
margin: 0 0 var(--sc-space-5);
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
.sc-widgets-bottom {
|
|
558
|
-
margin: var(--sc-space-5) 0 0;
|
|
559
|
-
}
|
|
560
|
-
|
|
561
|
-
.sc-widget {
|
|
562
|
-
grid-column: span 6;
|
|
563
|
-
padding: var(--sc-space-3) var(--sc-space-4);
|
|
564
|
-
border: var(--sc-border);
|
|
565
|
-
border-radius: var(--sc-radius-lg);
|
|
566
|
-
background: var(--sc-color-bg-raised);
|
|
567
|
-
}
|
|
568
|
-
|
|
569
|
-
.sc-widget-title {
|
|
570
|
-
margin: 0 0 var(--sc-space-2);
|
|
571
|
-
font-size: var(--sc-text-sm);
|
|
572
|
-
font-weight: var(--sc-weight-medium);
|
|
584
|
+
/* What stands in for a frame that has nothing to show. */
|
|
585
|
+
.sc-plugin-frame-unavailable {
|
|
586
|
+
margin: 0;
|
|
573
587
|
color: var(--sc-color-text-muted);
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
@media (min-width: 48rem) {
|
|
577
|
-
.sc-widget-third {
|
|
578
|
-
grid-column: span 2;
|
|
579
|
-
}
|
|
580
|
-
|
|
581
|
-
.sc-widget-half {
|
|
582
|
-
grid-column: span 3;
|
|
583
|
-
}
|
|
584
|
-
|
|
585
|
-
.sc-widget-full {
|
|
586
|
-
grid-column: span 6;
|
|
587
|
-
}
|
|
588
|
+
font-size: var(--sc-text-sm);
|
|
588
589
|
}
|
|
589
590
|
|
|
590
591
|
/* What waits, beside a tab's name: a count in the point colour, so it reads before the words. */
|
|
@@ -772,18 +773,20 @@ html[data-console] body {
|
|
|
772
773
|
/* The page is a column of blocks that fills the window below the header, so that a block which
|
|
773
774
|
wants the rest of the height, the board, can take it. */
|
|
774
775
|
.sc-main {
|
|
776
|
+
--sc-main-top: var(--sc-space-6);
|
|
777
|
+
--sc-main-side: var(--sc-gutter);
|
|
775
778
|
display: flex;
|
|
776
779
|
flex: 1;
|
|
777
780
|
flex-direction: column;
|
|
778
781
|
width: 100%;
|
|
779
|
-
padding: var(--sc-
|
|
782
|
+
padding: var(--sc-main-top) var(--sc-main-side) var(--sc-space-8);
|
|
780
783
|
}
|
|
781
784
|
|
|
782
785
|
/* A page as wide as the window: the board, whose columns want every bit of it. It starts at the
|
|
783
786
|
same height as the other pages and, being as tall as the window, ends with the same room. */
|
|
784
787
|
.sc-main-wide {
|
|
785
788
|
max-width: none;
|
|
786
|
-
padding: var(--sc-
|
|
789
|
+
padding: var(--sc-main-top) var(--sc-main-side);
|
|
787
790
|
}
|
|
788
791
|
|
|
789
792
|
/* A page that takes the whole window takes the header with it, so that the lockup, the tabs and
|
|
@@ -884,7 +887,9 @@ html[data-console] body {
|
|
|
884
887
|
|
|
885
888
|
.sc-panel,
|
|
886
889
|
.sc-column,
|
|
887
|
-
.sc-
|
|
890
|
+
.sc-tile-pane,
|
|
891
|
+
.sc-home-bar,
|
|
892
|
+
.sc-person-card,
|
|
888
893
|
.sc-decision,
|
|
889
894
|
.sc-run,
|
|
890
895
|
.sc-comment,
|
|
@@ -2528,14 +2533,128 @@ select.sc-input {
|
|
|
2528
2533
|
user-select: all;
|
|
2529
2534
|
}
|
|
2530
2535
|
|
|
2531
|
-
/* People: everyone of the board
|
|
2532
|
-
|
|
2533
|
-
their work
|
|
2536
|
+
/* People: everyone of the board as cards in a grid. The person at the head, their account and
|
|
2537
|
+
where it came from under the name; what they are as rows of one shape, so that the cards read
|
|
2538
|
+
alike down a column; the ways to their work at the foot. */
|
|
2534
2539
|
|
|
2535
2540
|
.sc-people {
|
|
2536
2541
|
display: grid;
|
|
2537
|
-
grid-template-columns: repeat(auto-fill, minmax(
|
|
2542
|
+
grid-template-columns: repeat(auto-fill, minmax(20rem, 1fr));
|
|
2543
|
+
gap: var(--sc-space-4);
|
|
2544
|
+
}
|
|
2545
|
+
|
|
2546
|
+
.sc-person-card {
|
|
2547
|
+
display: flex;
|
|
2548
|
+
flex-direction: column;
|
|
2549
|
+
gap: var(--sc-space-4);
|
|
2550
|
+
min-width: 0;
|
|
2551
|
+
padding: var(--sc-space-5);
|
|
2552
|
+
border-radius: var(--sc-radius-xl);
|
|
2553
|
+
}
|
|
2554
|
+
|
|
2555
|
+
.sc-person-card-head {
|
|
2556
|
+
display: flex;
|
|
2557
|
+
align-items: center;
|
|
2558
|
+
gap: var(--sc-space-3);
|
|
2559
|
+
min-width: 0;
|
|
2560
|
+
}
|
|
2561
|
+
|
|
2562
|
+
.sc-person-card-head .sc-avatar {
|
|
2563
|
+
width: 3rem;
|
|
2564
|
+
height: 3rem;
|
|
2565
|
+
font-size: var(--sc-text-lg);
|
|
2566
|
+
}
|
|
2567
|
+
|
|
2568
|
+
.sc-person-card-who {
|
|
2569
|
+
display: grid;
|
|
2570
|
+
gap: 0.125rem;
|
|
2571
|
+
min-width: 0;
|
|
2572
|
+
}
|
|
2573
|
+
|
|
2574
|
+
.sc-person-card-name {
|
|
2575
|
+
display: flex;
|
|
2576
|
+
flex-wrap: wrap;
|
|
2577
|
+
align-items: baseline;
|
|
2578
|
+
gap: var(--sc-space-1) var(--sc-space-2);
|
|
2579
|
+
color: var(--sc-color-text);
|
|
2580
|
+
font-size: var(--sc-text-md);
|
|
2581
|
+
font-weight: var(--sc-weight-bold);
|
|
2582
|
+
line-height: var(--sc-leading-snug);
|
|
2583
|
+
overflow-wrap: anywhere;
|
|
2584
|
+
}
|
|
2585
|
+
|
|
2586
|
+
.sc-person-card-name .sc-person-you {
|
|
2587
|
+
margin: 0;
|
|
2588
|
+
font-weight: var(--sc-weight-normal);
|
|
2589
|
+
}
|
|
2590
|
+
|
|
2591
|
+
.sc-person-card-note {
|
|
2592
|
+
color: var(--sc-color-text-muted);
|
|
2593
|
+
font-size: var(--sc-text-xs);
|
|
2594
|
+
overflow-wrap: anywhere;
|
|
2595
|
+
}
|
|
2596
|
+
|
|
2597
|
+
.sc-person-facts {
|
|
2598
|
+
display: grid;
|
|
2599
|
+
gap: var(--sc-space-1);
|
|
2600
|
+
margin: 0;
|
|
2601
|
+
padding-top: var(--sc-space-3);
|
|
2602
|
+
border-top: var(--sc-hairline);
|
|
2603
|
+
}
|
|
2604
|
+
|
|
2605
|
+
.sc-person-fact {
|
|
2606
|
+
display: flex;
|
|
2607
|
+
align-items: center;
|
|
2608
|
+
justify-content: space-between;
|
|
2538
2609
|
gap: var(--sc-space-3);
|
|
2610
|
+
min-height: 2rem;
|
|
2611
|
+
}
|
|
2612
|
+
|
|
2613
|
+
.sc-person-fact dt {
|
|
2614
|
+
flex: none;
|
|
2615
|
+
color: var(--sc-color-text-muted);
|
|
2616
|
+
font-size: var(--sc-text-sm);
|
|
2617
|
+
}
|
|
2618
|
+
|
|
2619
|
+
.sc-person-fact dd {
|
|
2620
|
+
display: flex;
|
|
2621
|
+
justify-content: flex-end;
|
|
2622
|
+
min-width: 0;
|
|
2623
|
+
margin: 0;
|
|
2624
|
+
font-size: var(--sc-text-sm);
|
|
2625
|
+
}
|
|
2626
|
+
|
|
2627
|
+
/* The ways to a person's work at the foot of the card, the way out across from them. */
|
|
2628
|
+
.sc-person-card-ways {
|
|
2629
|
+
display: flex;
|
|
2630
|
+
flex-wrap: wrap;
|
|
2631
|
+
align-items: center;
|
|
2632
|
+
gap: var(--sc-space-1);
|
|
2633
|
+
margin-top: auto;
|
|
2634
|
+
margin-inline: calc(var(--sc-space-2) * -1);
|
|
2635
|
+
}
|
|
2636
|
+
|
|
2637
|
+
.sc-person-card-ways button {
|
|
2638
|
+
margin-inline-start: auto;
|
|
2639
|
+
}
|
|
2640
|
+
|
|
2641
|
+
/* A select that reads as the value it holds, until the pointer or the focus is on it. */
|
|
2642
|
+
select.sc-input-quiet {
|
|
2643
|
+
width: auto;
|
|
2644
|
+
min-width: 0;
|
|
2645
|
+
max-width: 100%;
|
|
2646
|
+
min-height: 2rem;
|
|
2647
|
+
padding-block: 0;
|
|
2648
|
+
padding-inline-start: var(--sc-space-2);
|
|
2649
|
+
border-color: transparent;
|
|
2650
|
+
background-color: transparent;
|
|
2651
|
+
text-overflow: ellipsis;
|
|
2652
|
+
}
|
|
2653
|
+
|
|
2654
|
+
select.sc-input-quiet:hover,
|
|
2655
|
+
select.sc-input-quiet:focus-visible {
|
|
2656
|
+
border-color: var(--sc-color-border);
|
|
2657
|
+
background-color: var(--sc-color-sheet);
|
|
2539
2658
|
}
|
|
2540
2659
|
|
|
2541
2660
|
.sc-person-row {
|
|
@@ -2596,118 +2715,11 @@ select.sc-input {
|
|
|
2596
2715
|
font-size: var(--sc-text-sm);
|
|
2597
2716
|
}
|
|
2598
2717
|
|
|
2599
|
-
/* Projects: what a person may see, each with what they are in it and what waits in it. */
|
|
2600
|
-
|
|
2601
|
-
.sc-projects {
|
|
2602
|
-
display: grid;
|
|
2603
|
-
grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr));
|
|
2604
|
-
gap: var(--sc-space-4);
|
|
2605
|
-
}
|
|
2606
|
-
|
|
2607
|
-
.sc-project {
|
|
2608
|
-
display: flex;
|
|
2609
|
-
flex-direction: column;
|
|
2610
|
-
gap: var(--sc-space-2);
|
|
2611
|
-
padding: var(--sc-space-5);
|
|
2612
|
-
border-radius: var(--sc-radius-xl);
|
|
2613
|
-
transition:
|
|
2614
|
-
border-color var(--sc-transition),
|
|
2615
|
-
background var(--sc-transition),
|
|
2616
|
-
box-shadow var(--sc-transition);
|
|
2617
|
-
}
|
|
2618
|
-
|
|
2619
|
-
.sc-project:hover,
|
|
2620
|
-
.sc-project:focus-within {
|
|
2621
|
-
border-color: var(--sc-color-accent);
|
|
2622
|
-
background: var(--sc-glass-surface-hover);
|
|
2623
|
-
box-shadow: var(--sc-glass-sheen), var(--sc-glass-lift), var(--sc-glow);
|
|
2624
|
-
}
|
|
2625
|
-
|
|
2626
|
-
/* The head of a project reads on three lines: the mark with the name beside it, the key under
|
|
2627
|
-
the name, and the badges on a line of their own; the mark floats so that the name and the key
|
|
2628
|
-
stack beside it without a box around them. */
|
|
2629
|
-
.sc-project-head {
|
|
2630
|
-
display: block;
|
|
2631
|
-
}
|
|
2632
|
-
|
|
2633
|
-
.sc-project-head::after {
|
|
2634
|
-
content: "";
|
|
2635
|
-
display: block;
|
|
2636
|
-
clear: both;
|
|
2637
|
-
}
|
|
2638
|
-
|
|
2639
|
-
.sc-project-head > :first-child {
|
|
2640
|
-
float: left;
|
|
2641
|
-
margin-inline-end: var(--sc-space-3);
|
|
2642
|
-
}
|
|
2643
|
-
|
|
2644
|
-
.sc-project-head > .sc-badge {
|
|
2645
|
-
margin-top: var(--sc-space-3);
|
|
2646
|
-
margin-inline-end: var(--sc-space-1);
|
|
2647
|
-
}
|
|
2648
|
-
|
|
2649
|
-
/* The whole pane is the way in: the name's link stretches over it. */
|
|
2650
|
-
.sc-project-name {
|
|
2651
|
-
display: block;
|
|
2652
|
-
color: var(--sc-color-text);
|
|
2653
|
-
font-size: var(--sc-text-lg);
|
|
2654
|
-
font-weight: var(--sc-weight-bold);
|
|
2655
|
-
line-height: var(--sc-leading-snug);
|
|
2656
|
-
text-decoration: none;
|
|
2657
|
-
overflow-wrap: anywhere;
|
|
2658
|
-
}
|
|
2659
|
-
|
|
2660
|
-
.sc-project-name::after {
|
|
2661
|
-
content: "";
|
|
2662
|
-
position: absolute;
|
|
2663
|
-
inset: 0;
|
|
2664
|
-
}
|
|
2665
|
-
|
|
2666
|
-
.sc-project-name:hover {
|
|
2667
|
-
color: var(--sc-color-text);
|
|
2668
|
-
}
|
|
2669
|
-
|
|
2670
|
-
.sc-project-name:focus-visible {
|
|
2671
|
-
outline: none;
|
|
2672
|
-
}
|
|
2673
|
-
|
|
2674
2718
|
.sc-project-key {
|
|
2675
2719
|
color: var(--sc-color-text-faint);
|
|
2676
2720
|
font-size: var(--sc-text-xs);
|
|
2677
2721
|
}
|
|
2678
2722
|
|
|
2679
|
-
/* Under the name, and past the mark: the key ends below the mark, so that the badges after it
|
|
2680
|
-
start at the edge. */
|
|
2681
|
-
.sc-project-head > .sc-project-key {
|
|
2682
|
-
display: block;
|
|
2683
|
-
margin-top: var(--sc-space-1);
|
|
2684
|
-
}
|
|
2685
|
-
|
|
2686
|
-
.sc-project-head > .sc-project-key::after {
|
|
2687
|
-
content: "";
|
|
2688
|
-
display: block;
|
|
2689
|
-
clear: both;
|
|
2690
|
-
}
|
|
2691
|
-
|
|
2692
|
-
.sc-project-description {
|
|
2693
|
-
margin-top: var(--sc-space-1);
|
|
2694
|
-
color: var(--sc-color-text-muted);
|
|
2695
|
-
font-size: var(--sc-text-sm);
|
|
2696
|
-
}
|
|
2697
|
-
|
|
2698
|
-
.sc-project-meta {
|
|
2699
|
-
display: flex;
|
|
2700
|
-
flex-wrap: wrap;
|
|
2701
|
-
gap: var(--sc-space-2);
|
|
2702
|
-
margin-top: auto;
|
|
2703
|
-
padding-top: var(--sc-space-3);
|
|
2704
|
-
border-top: var(--sc-hairline);
|
|
2705
|
-
}
|
|
2706
|
-
|
|
2707
|
-
.sc-project-meta:empty {
|
|
2708
|
-
display: none;
|
|
2709
|
-
}
|
|
2710
|
-
|
|
2711
2723
|
.sc-members {
|
|
2712
2724
|
display: grid;
|
|
2713
2725
|
gap: var(--sc-space-4);
|
|
@@ -3830,11 +3842,12 @@ select.sc-input {
|
|
|
3830
3842
|
|
|
3831
3843
|
/* The title of a bar with more days in the week runs along the bar as far as its days reach,
|
|
3832
3844
|
less the room of its end, instead of stopping at the first day's edge: above every piece,
|
|
3833
|
-
the one under the pointer included, and under the cards
|
|
3834
|
-
piece of the day beneath. The days are the first
|
|
3845
|
+
the one under the pointer included, and under the cards and the header, which the page scrolls
|
|
3846
|
+
beneath; the pointer goes through it to the piece of the day beneath. The days are the first
|
|
3847
|
+
piece's own custom property. */
|
|
3835
3848
|
.sc-calendar-task-title-spanning {
|
|
3836
3849
|
position: relative;
|
|
3837
|
-
z-index:
|
|
3850
|
+
z-index: 2;
|
|
3838
3851
|
flex: none;
|
|
3839
3852
|
max-width: calc(var(--sc-span, 1) * 100% - 2.25rem);
|
|
3840
3853
|
pointer-events: none;
|
|
@@ -3918,14 +3931,6 @@ select.sc-input {
|
|
|
3918
3931
|
|
|
3919
3932
|
/* The mark hangs in the margin, so that what wraps onto a second line, a badge most often,
|
|
3920
3933
|
starts under the name rather than under the mark. */
|
|
3921
|
-
.sc-project-head:has(> .sc-mark-md) {
|
|
3922
|
-
padding-inline-start: calc(2rem + var(--sc-space-3));
|
|
3923
|
-
}
|
|
3924
|
-
|
|
3925
|
-
.sc-project-head > .sc-mark-md {
|
|
3926
|
-
margin-inline-start: calc(-2rem - var(--sc-space-3));
|
|
3927
|
-
}
|
|
3928
|
-
|
|
3929
3934
|
.sc-mark-lg {
|
|
3930
3935
|
width: 3rem;
|
|
3931
3936
|
height: 3rem;
|
|
@@ -4561,7 +4566,13 @@ select.sc-input {
|
|
|
4561
4566
|
}
|
|
4562
4567
|
|
|
4563
4568
|
.sc-main {
|
|
4564
|
-
|
|
4569
|
+
--sc-main-top: var(--sc-space-5);
|
|
4570
|
+
--sc-main-side: var(--sc-space-4);
|
|
4571
|
+
padding-bottom: var(--sc-space-7);
|
|
4572
|
+
}
|
|
4573
|
+
|
|
4574
|
+
.sc-page-tabs {
|
|
4575
|
+
gap: var(--sc-space-4);
|
|
4565
4576
|
}
|
|
4566
4577
|
|
|
4567
4578
|
.sc-page-title,
|
|
@@ -5155,13 +5166,14 @@ select.sc-input {
|
|
|
5155
5166
|
}
|
|
5156
5167
|
|
|
5157
5168
|
/* A goal's page reads as the board does: the facts in a row at its head, then a switch between
|
|
5158
|
-
the views of its tasks, then the view, which takes the rest of the height as the board does.
|
|
5169
|
+
the views of its tasks, then the view, which takes the rest of the height as the board does. A
|
|
5170
|
+
view that needs more makes the page longer, as on any page: held to the window, it would run out
|
|
5171
|
+
of the shell, and the header, which stays within the shell, would go with the scrolling. */
|
|
5159
5172
|
.sc-goal-page {
|
|
5160
5173
|
display: flex;
|
|
5161
5174
|
flex: 1 1 0;
|
|
5162
5175
|
flex-direction: column;
|
|
5163
5176
|
gap: var(--sc-space-4);
|
|
5164
|
-
min-height: 0;
|
|
5165
5177
|
}
|
|
5166
5178
|
|
|
5167
5179
|
.sc-goal-header {
|
|
@@ -5251,7 +5263,6 @@ select.sc-input {
|
|
|
5251
5263
|
display: flex;
|
|
5252
5264
|
flex: 1 1 0;
|
|
5253
5265
|
flex-direction: column;
|
|
5254
|
-
min-height: 0;
|
|
5255
5266
|
}
|
|
5256
5267
|
|
|
5257
5268
|
.sc-goal-view-list {
|
|
@@ -5895,27 +5906,140 @@ select.sc-input {
|
|
|
5895
5906
|
margin-top: 0.25em;
|
|
5896
5907
|
}
|
|
5897
5908
|
|
|
5898
|
-
|
|
5899
|
-
|
|
5900
|
-
|
|
5909
|
+
/* One the plugin requires: on, and not the person's to change, so it does not read as a control. */
|
|
5910
|
+
.sc-plugin-tick-locked {
|
|
5911
|
+
background: transparent;
|
|
5912
|
+
cursor: default;
|
|
5901
5913
|
}
|
|
5902
5914
|
|
|
5903
|
-
|
|
5904
|
-
|
|
5915
|
+
/* What a plugin asks, in two lists: what it requires, and what it can go without. */
|
|
5916
|
+
.sc-plugin-capabilities {
|
|
5917
|
+
display: grid;
|
|
5918
|
+
gap: var(--sc-space-2);
|
|
5905
5919
|
}
|
|
5906
5920
|
|
|
5907
|
-
.sc-plugin-
|
|
5908
|
-
|
|
5909
|
-
font-size: var(--sc-text-sm);
|
|
5921
|
+
.sc-plugin-capabilities + .sc-plugin-capabilities {
|
|
5922
|
+
margin-top: var(--sc-space-3);
|
|
5910
5923
|
}
|
|
5911
5924
|
|
|
5912
|
-
|
|
5913
|
-
|
|
5914
|
-
|
|
5915
|
-
|
|
5925
|
+
.sc-plugin-capabilities-head {
|
|
5926
|
+
display: flex;
|
|
5927
|
+
flex-wrap: wrap;
|
|
5928
|
+
align-items: baseline;
|
|
5929
|
+
gap: var(--sc-space-1) var(--sc-space-2);
|
|
5916
5930
|
margin: 0;
|
|
5917
|
-
|
|
5918
|
-
|
|
5931
|
+
}
|
|
5932
|
+
|
|
5933
|
+
.sc-plugin-capabilities-name {
|
|
5934
|
+
font-size: var(--sc-text-sm);
|
|
5935
|
+
font-weight: var(--sc-weight-bold);
|
|
5936
|
+
}
|
|
5937
|
+
|
|
5938
|
+
.sc-plugin-capabilities-head .sc-settings-hint {
|
|
5939
|
+
margin: 0;
|
|
5940
|
+
}
|
|
5941
|
+
|
|
5942
|
+
/* What it can go without, on the page of a plugin that is on: under what it requires, each a box. */
|
|
5943
|
+
.sc-plugin-optional {
|
|
5944
|
+
display: grid;
|
|
5945
|
+
gap: var(--sc-space-1);
|
|
5946
|
+
margin-top: var(--sc-space-3);
|
|
5947
|
+
}
|
|
5948
|
+
|
|
5949
|
+
.sc-plugin-tick-words {
|
|
5950
|
+
display: grid;
|
|
5951
|
+
gap: 2px;
|
|
5952
|
+
}
|
|
5953
|
+
|
|
5954
|
+
.sc-plugin-tick-name {
|
|
5955
|
+
display: inline-flex;
|
|
5956
|
+
flex-wrap: wrap;
|
|
5957
|
+
align-items: center;
|
|
5958
|
+
gap: var(--sc-space-2);
|
|
5959
|
+
font-weight: var(--sc-weight-medium);
|
|
5960
|
+
}
|
|
5961
|
+
|
|
5962
|
+
.sc-plugin-tick-under {
|
|
5963
|
+
color: var(--sc-color-text-muted);
|
|
5964
|
+
font-size: var(--sc-text-sm);
|
|
5965
|
+
}
|
|
5966
|
+
|
|
5967
|
+
/* A setting of several choices (a list of an enum): a pill per choice, lit while chosen. */
|
|
5968
|
+
.sc-toggle-chips {
|
|
5969
|
+
display: flex;
|
|
5970
|
+
flex-wrap: wrap;
|
|
5971
|
+
gap: var(--sc-space-2);
|
|
5972
|
+
margin: 0;
|
|
5973
|
+
padding: 0;
|
|
5974
|
+
border: 0;
|
|
5975
|
+
}
|
|
5976
|
+
|
|
5977
|
+
.sc-toggle-chip {
|
|
5978
|
+
display: inline-flex;
|
|
5979
|
+
align-items: center;
|
|
5980
|
+
gap: var(--sc-space-1);
|
|
5981
|
+
min-height: var(--sc-control-size);
|
|
5982
|
+
padding: 0 var(--sc-space-3);
|
|
5983
|
+
border: var(--sc-border);
|
|
5984
|
+
border-radius: var(--sc-radius-full);
|
|
5985
|
+
background: var(--sc-color-bg-inset);
|
|
5986
|
+
font-size: var(--sc-text-sm);
|
|
5987
|
+
cursor: pointer;
|
|
5988
|
+
}
|
|
5989
|
+
|
|
5990
|
+
.sc-toggle-chip input {
|
|
5991
|
+
margin: 0;
|
|
5992
|
+
}
|
|
5993
|
+
|
|
5994
|
+
.sc-toggle-chip:has(input:checked) {
|
|
5995
|
+
border-color: var(--sc-color-point);
|
|
5996
|
+
background: var(--sc-color-point-subtle);
|
|
5997
|
+
color: var(--sc-color-point);
|
|
5998
|
+
}
|
|
5999
|
+
|
|
6000
|
+
/* A list of several choices too long for pills: a column of boxes. */
|
|
6001
|
+
.sc-check-list {
|
|
6002
|
+
display: grid;
|
|
6003
|
+
gap: var(--sc-space-1);
|
|
6004
|
+
margin: 0;
|
|
6005
|
+
padding: 0;
|
|
6006
|
+
list-style: none;
|
|
6007
|
+
}
|
|
6008
|
+
|
|
6009
|
+
/* A list of items typed one by one: the field and its button on one line, the items as chips above. */
|
|
6010
|
+
.sc-chip-input {
|
|
6011
|
+
display: flex;
|
|
6012
|
+
gap: var(--sc-space-2);
|
|
6013
|
+
width: 100%;
|
|
6014
|
+
}
|
|
6015
|
+
|
|
6016
|
+
.sc-chip-input .sc-input {
|
|
6017
|
+
flex: 1;
|
|
6018
|
+
min-width: 0;
|
|
6019
|
+
}
|
|
6020
|
+
|
|
6021
|
+
/* The settings form divided into groups: each a titled block after the ungrouped settings. */
|
|
6022
|
+
.sc-settings-group {
|
|
6023
|
+
padding-top: var(--sc-space-5);
|
|
6024
|
+
}
|
|
6025
|
+
|
|
6026
|
+
.sc-settings-group-title {
|
|
6027
|
+
margin: 0;
|
|
6028
|
+
font-size: var(--sc-text-md);
|
|
6029
|
+
font-weight: var(--sc-weight-medium);
|
|
6030
|
+
}
|
|
6031
|
+
|
|
6032
|
+
.sc-settings-group > .sc-settings-row:first-of-type {
|
|
6033
|
+
border-top: 0;
|
|
6034
|
+
}
|
|
6035
|
+
|
|
6036
|
+
/* The capabilities an enabled plugin holds, one a line; its commands as words side by side. */
|
|
6037
|
+
.sc-plugin-held {
|
|
6038
|
+
display: grid;
|
|
6039
|
+
gap: var(--sc-space-1);
|
|
6040
|
+
margin: 0;
|
|
6041
|
+
padding: 0;
|
|
6042
|
+
list-style: none;
|
|
5919
6043
|
}
|
|
5920
6044
|
|
|
5921
6045
|
.sc-plugin-codes {
|
|
@@ -6028,3 +6152,449 @@ select.sc-input {
|
|
|
6028
6152
|
grid-template-columns: minmax(0, 1fr);
|
|
6029
6153
|
}
|
|
6030
6154
|
}
|
|
6155
|
+
|
|
6156
|
+
/* The front page (ADR-0061): one grid of square cells, each as wide as the page gives it, a
|
|
6157
|
+
tile's place and shape numbers on its style. A tile stands where a transform puts it, so that
|
|
6158
|
+
it glides to a new place and the frame in it stays loaded. */
|
|
6159
|
+
|
|
6160
|
+
.sc-home {
|
|
6161
|
+
container-type: inline-size;
|
|
6162
|
+
}
|
|
6163
|
+
|
|
6164
|
+
.sc-home-grid {
|
|
6165
|
+
--sc-home-columns: 8;
|
|
6166
|
+
--sc-home-rows: 1;
|
|
6167
|
+
--sc-home-gap: var(--sc-space-4);
|
|
6168
|
+
--sc-home-cell: calc(
|
|
6169
|
+
(100cqi - (var(--sc-home-columns) - 1) * var(--sc-home-gap)) /
|
|
6170
|
+
var(--sc-home-columns)
|
|
6171
|
+
);
|
|
6172
|
+
--sc-home-step: calc(var(--sc-home-cell) + var(--sc-home-gap));
|
|
6173
|
+
position: relative;
|
|
6174
|
+
height: calc(var(--sc-home-rows) * var(--sc-home-step) - var(--sc-home-gap));
|
|
6175
|
+
row-gap: var(--sc-home-gap);
|
|
6176
|
+
margin: 0;
|
|
6177
|
+
padding: 0;
|
|
6178
|
+
list-style: none;
|
|
6179
|
+
}
|
|
6180
|
+
|
|
6181
|
+
.sc-home-grid[data-columns="4"] {
|
|
6182
|
+
--sc-home-gap: var(--sc-space-3);
|
|
6183
|
+
}
|
|
6184
|
+
|
|
6185
|
+
.sc-tile {
|
|
6186
|
+
container: sc-tile / size;
|
|
6187
|
+
--sc-tile-x: 0;
|
|
6188
|
+
--sc-tile-y: 0;
|
|
6189
|
+
--sc-tile-w: 1;
|
|
6190
|
+
--sc-tile-h: 1;
|
|
6191
|
+
--sc-tile-left: 0px;
|
|
6192
|
+
--sc-tile-top: 0px;
|
|
6193
|
+
--sc-tile-wait: 0ms;
|
|
6194
|
+
position: absolute;
|
|
6195
|
+
top: 0;
|
|
6196
|
+
left: 0;
|
|
6197
|
+
width: calc(var(--sc-tile-w) * var(--sc-home-step) - var(--sc-home-gap));
|
|
6198
|
+
height: calc(var(--sc-tile-h) * var(--sc-home-step) - var(--sc-home-gap));
|
|
6199
|
+
/* The property of its own and not `transform`, which the `scale` of a tile in hand would multiply. */
|
|
6200
|
+
translate: calc(var(--sc-tile-x) * var(--sc-home-step))
|
|
6201
|
+
calc(var(--sc-tile-y) * var(--sc-home-step));
|
|
6202
|
+
}
|
|
6203
|
+
|
|
6204
|
+
.sc-tile-pane {
|
|
6205
|
+
width: 100%;
|
|
6206
|
+
height: 100%;
|
|
6207
|
+
border-radius: var(--sc-radius-xl);
|
|
6208
|
+
transition:
|
|
6209
|
+
border-color var(--sc-transition),
|
|
6210
|
+
background var(--sc-transition),
|
|
6211
|
+
box-shadow var(--sc-transition);
|
|
6212
|
+
}
|
|
6213
|
+
|
|
6214
|
+
/* A project as an icon: its mark and its name in the middle of the cell, what waits in the corner.
|
|
6215
|
+
The mark and the room around it follow the cell. What still does not fit stands whole or not at
|
|
6216
|
+
all: its row goes to a second column, past the room the tile cuts off, so that no line of words
|
|
6217
|
+
is ever cut across. */
|
|
6218
|
+
.sc-tile-project {
|
|
6219
|
+
--sc-tile-mark: clamp(1.75rem, 47cqh, 3.25rem);
|
|
6220
|
+
display: flex;
|
|
6221
|
+
flex-flow: column wrap;
|
|
6222
|
+
gap: clamp(0.125rem, 4cqh, 0.5rem) var(--sc-space-7);
|
|
6223
|
+
align-content: flex-start;
|
|
6224
|
+
justify-content: center;
|
|
6225
|
+
padding: clamp(0.25rem, 8cqh, 0.75rem);
|
|
6226
|
+
overflow: hidden;
|
|
6227
|
+
color: var(--sc-color-text);
|
|
6228
|
+
text-align: center;
|
|
6229
|
+
text-decoration: none;
|
|
6230
|
+
}
|
|
6231
|
+
|
|
6232
|
+
.sc-tile-project > :not(.sc-tile-count) {
|
|
6233
|
+
flex: none;
|
|
6234
|
+
width: 100%;
|
|
6235
|
+
}
|
|
6236
|
+
|
|
6237
|
+
.sc-tile-mark {
|
|
6238
|
+
display: flex;
|
|
6239
|
+
justify-content: center;
|
|
6240
|
+
}
|
|
6241
|
+
|
|
6242
|
+
a.sc-tile-project:hover,
|
|
6243
|
+
a.sc-tile-project:focus-visible {
|
|
6244
|
+
border-color: var(--sc-color-accent);
|
|
6245
|
+
background: var(--sc-glass-surface-hover);
|
|
6246
|
+
color: var(--sc-color-text);
|
|
6247
|
+
box-shadow: var(--sc-glass-sheen), var(--sc-glass-lift), var(--sc-glow);
|
|
6248
|
+
}
|
|
6249
|
+
|
|
6250
|
+
.sc-tile-project .sc-mark {
|
|
6251
|
+
width: var(--sc-tile-mark);
|
|
6252
|
+
height: var(--sc-tile-mark);
|
|
6253
|
+
font-size: calc(var(--sc-tile-mark) * 0.42);
|
|
6254
|
+
}
|
|
6255
|
+
|
|
6256
|
+
.sc-tile-name {
|
|
6257
|
+
display: -webkit-box;
|
|
6258
|
+
max-width: 100%;
|
|
6259
|
+
overflow: hidden;
|
|
6260
|
+
font-size: var(--sc-text-sm);
|
|
6261
|
+
font-weight: var(--sc-weight-medium);
|
|
6262
|
+
line-height: var(--sc-leading-snug);
|
|
6263
|
+
overflow-wrap: anywhere;
|
|
6264
|
+
-webkit-box-orient: vertical;
|
|
6265
|
+
-webkit-line-clamp: 2;
|
|
6266
|
+
}
|
|
6267
|
+
|
|
6268
|
+
/* What waits, in the corner: the count a tab shows, where it stands on a tile. */
|
|
6269
|
+
.sc-tile-count {
|
|
6270
|
+
position: absolute;
|
|
6271
|
+
top: var(--sc-space-2);
|
|
6272
|
+
right: var(--sc-space-2);
|
|
6273
|
+
}
|
|
6274
|
+
|
|
6275
|
+
/* On a low cell the name keeps to one line, on the lowest in smaller words. */
|
|
6276
|
+
@container sc-tile (height < 7.75rem) {
|
|
6277
|
+
.sc-tile-project:not(.sc-tile-project-card) .sc-tile-name {
|
|
6278
|
+
-webkit-line-clamp: 1;
|
|
6279
|
+
}
|
|
6280
|
+
}
|
|
6281
|
+
|
|
6282
|
+
@container sc-tile (height < 5.5rem) {
|
|
6283
|
+
.sc-tile-project:not(.sc-tile-project-card) {
|
|
6284
|
+
border-radius: var(--sc-radius-lg);
|
|
6285
|
+
}
|
|
6286
|
+
|
|
6287
|
+
.sc-tile-project:not(.sc-tile-project-card) .sc-tile-name {
|
|
6288
|
+
font-size: var(--sc-text-xs);
|
|
6289
|
+
line-height: var(--sc-leading-tight);
|
|
6290
|
+
}
|
|
6291
|
+
}
|
|
6292
|
+
|
|
6293
|
+
/* A project as a card, read from the corner: its name, what it is at a glance, and as much of its
|
|
6294
|
+
description as the card has room for, the rows lost from the last up. */
|
|
6295
|
+
.sc-tile-project-card {
|
|
6296
|
+
--sc-tile-mark: clamp(2.25rem, 22cqh, 3.25rem);
|
|
6297
|
+
justify-content: flex-start;
|
|
6298
|
+
padding: clamp(0.75rem, 8cqh, 1.25rem);
|
|
6299
|
+
text-align: start;
|
|
6300
|
+
}
|
|
6301
|
+
|
|
6302
|
+
.sc-tile-project-card .sc-tile-mark {
|
|
6303
|
+
justify-content: flex-start;
|
|
6304
|
+
}
|
|
6305
|
+
|
|
6306
|
+
.sc-tile-project-card .sc-tile-name {
|
|
6307
|
+
font-size: var(--sc-text-lg);
|
|
6308
|
+
font-weight: var(--sc-weight-bold);
|
|
6309
|
+
}
|
|
6310
|
+
|
|
6311
|
+
.sc-tile-meta {
|
|
6312
|
+
display: flex;
|
|
6313
|
+
flex-wrap: wrap;
|
|
6314
|
+
gap: var(--sc-space-1) var(--sc-space-2);
|
|
6315
|
+
align-items: center;
|
|
6316
|
+
}
|
|
6317
|
+
|
|
6318
|
+
.sc-tile-about {
|
|
6319
|
+
display: -webkit-box;
|
|
6320
|
+
overflow: hidden;
|
|
6321
|
+
color: var(--sc-color-text-muted);
|
|
6322
|
+
font-size: var(--sc-text-sm);
|
|
6323
|
+
-webkit-box-orient: vertical;
|
|
6324
|
+
-webkit-line-clamp: 3;
|
|
6325
|
+
}
|
|
6326
|
+
|
|
6327
|
+
@container sc-tile (height < 15rem) {
|
|
6328
|
+
.sc-tile-project-card .sc-tile-name {
|
|
6329
|
+
-webkit-line-clamp: 1;
|
|
6330
|
+
}
|
|
6331
|
+
|
|
6332
|
+
.sc-tile-about {
|
|
6333
|
+
-webkit-line-clamp: 2;
|
|
6334
|
+
}
|
|
6335
|
+
}
|
|
6336
|
+
|
|
6337
|
+
@container sc-tile (height < 13rem) {
|
|
6338
|
+
.sc-tile-about {
|
|
6339
|
+
-webkit-line-clamp: 1;
|
|
6340
|
+
}
|
|
6341
|
+
}
|
|
6342
|
+
|
|
6343
|
+
/* A widget: its name, and its frame filling the cells its size gives it. */
|
|
6344
|
+
.sc-tile-widget {
|
|
6345
|
+
display: grid;
|
|
6346
|
+
grid-template-rows: auto minmax(0, 1fr);
|
|
6347
|
+
padding: var(--sc-space-3) var(--sc-space-4);
|
|
6348
|
+
overflow: hidden;
|
|
6349
|
+
}
|
|
6350
|
+
|
|
6351
|
+
.sc-tile-title {
|
|
6352
|
+
margin: 0 0 var(--sc-space-2);
|
|
6353
|
+
overflow: hidden;
|
|
6354
|
+
color: var(--sc-color-text-muted);
|
|
6355
|
+
font-size: var(--sc-text-sm);
|
|
6356
|
+
font-weight: var(--sc-weight-medium);
|
|
6357
|
+
text-overflow: ellipsis;
|
|
6358
|
+
white-space: nowrap;
|
|
6359
|
+
}
|
|
6360
|
+
|
|
6361
|
+
.sc-tile-widget .sc-plugin-frame-widget {
|
|
6362
|
+
height: 100%;
|
|
6363
|
+
min-height: 0;
|
|
6364
|
+
}
|
|
6365
|
+
|
|
6366
|
+
/* While the page is arranged: the cells show as dots, every tile is a thing to take hold of, and
|
|
6367
|
+
what is in a frame stays out of the pointer's way. The bar stays in reach, just under the header
|
|
6368
|
+
and above the tiles that pass beneath it. */
|
|
6369
|
+
.sc-home-bar {
|
|
6370
|
+
position: sticky;
|
|
6371
|
+
top: calc(var(--sc-header-height) + 2.75rem + var(--sc-space-3));
|
|
6372
|
+
z-index: 2;
|
|
6373
|
+
display: flex;
|
|
6374
|
+
flex-wrap: wrap;
|
|
6375
|
+
gap: var(--sc-space-2) var(--sc-space-4);
|
|
6376
|
+
align-items: center;
|
|
6377
|
+
justify-content: space-between;
|
|
6378
|
+
margin-bottom: var(--sc-space-4);
|
|
6379
|
+
padding: var(--sc-space-2) var(--sc-space-2) var(--sc-space-2) var(--sc-space-4);
|
|
6380
|
+
border-radius: var(--sc-radius-lg);
|
|
6381
|
+
}
|
|
6382
|
+
|
|
6383
|
+
.sc-home-hint {
|
|
6384
|
+
margin: 0;
|
|
6385
|
+
color: var(--sc-color-text-muted);
|
|
6386
|
+
font-size: var(--sc-text-sm);
|
|
6387
|
+
}
|
|
6388
|
+
|
|
6389
|
+
.sc-home-bar-actions {
|
|
6390
|
+
display: flex;
|
|
6391
|
+
gap: var(--sc-space-2);
|
|
6392
|
+
align-items: center;
|
|
6393
|
+
}
|
|
6394
|
+
|
|
6395
|
+
.sc-home-tray {
|
|
6396
|
+
display: flex;
|
|
6397
|
+
flex-wrap: wrap;
|
|
6398
|
+
gap: var(--sc-space-2);
|
|
6399
|
+
align-items: center;
|
|
6400
|
+
margin-bottom: var(--sc-space-4);
|
|
6401
|
+
}
|
|
6402
|
+
|
|
6403
|
+
.sc-home-add {
|
|
6404
|
+
padding: var(--sc-space-1) var(--sc-space-3);
|
|
6405
|
+
border: var(--sc-border);
|
|
6406
|
+
border-radius: var(--sc-radius-full);
|
|
6407
|
+
background: var(--sc-color-sheet);
|
|
6408
|
+
color: var(--sc-color-text);
|
|
6409
|
+
font: inherit;
|
|
6410
|
+
font-size: var(--sc-text-sm);
|
|
6411
|
+
cursor: pointer;
|
|
6412
|
+
}
|
|
6413
|
+
|
|
6414
|
+
.sc-home-add:hover {
|
|
6415
|
+
border-color: var(--sc-color-accent);
|
|
6416
|
+
}
|
|
6417
|
+
|
|
6418
|
+
.sc-home-editing .sc-home-grid {
|
|
6419
|
+
background-image: radial-gradient(circle, var(--sc-color-text-faint) 1px, transparent 1.5px);
|
|
6420
|
+
background-position: calc(var(--sc-home-cell) / 2) calc(var(--sc-home-cell) / 2);
|
|
6421
|
+
background-size: var(--sc-home-step) var(--sc-home-step);
|
|
6422
|
+
}
|
|
6423
|
+
|
|
6424
|
+
/* A tile moves with a little give, overshooting its cell and settling on it, and those in the way
|
|
6425
|
+
start one after another, each as the wait in its style says. One put down keeps its place above
|
|
6426
|
+
the others until it has landed. */
|
|
6427
|
+
.sc-home-editing .sc-tile {
|
|
6428
|
+
z-index: 1;
|
|
6429
|
+
cursor: grab;
|
|
6430
|
+
transition:
|
|
6431
|
+
translate 360ms cubic-bezier(0.25, 1.35, 0.4, 1) var(--sc-tile-wait),
|
|
6432
|
+
scale 160ms ease-out,
|
|
6433
|
+
z-index 0s linear 360ms;
|
|
6434
|
+
user-select: none;
|
|
6435
|
+
}
|
|
6436
|
+
|
|
6437
|
+
.sc-home-editing .sc-tile:focus-visible {
|
|
6438
|
+
outline: var(--sc-focus-ring);
|
|
6439
|
+
outline-offset: 2px;
|
|
6440
|
+
}
|
|
6441
|
+
|
|
6442
|
+
.sc-home-editing .sc-tile:hover .sc-tile-pane {
|
|
6443
|
+
border-color: var(--sc-color-accent);
|
|
6444
|
+
}
|
|
6445
|
+
|
|
6446
|
+
.sc-home-editing .sc-plugin-frame {
|
|
6447
|
+
pointer-events: none;
|
|
6448
|
+
}
|
|
6449
|
+
|
|
6450
|
+
/* A finger resting on a tile is neither selecting its words nor asking for the page's menu. */
|
|
6451
|
+
@media (pointer: coarse) {
|
|
6452
|
+
.sc-home-editing .sc-tile {
|
|
6453
|
+
-webkit-touch-callout: none;
|
|
6454
|
+
}
|
|
6455
|
+
}
|
|
6456
|
+
|
|
6457
|
+
/* The tile in hand: lifted off the page, and under the pointer with no delay. */
|
|
6458
|
+
.sc-home-editing .sc-tile-held {
|
|
6459
|
+
z-index: 10;
|
|
6460
|
+
translate: var(--sc-tile-left) var(--sc-tile-top);
|
|
6461
|
+
scale: 1.04;
|
|
6462
|
+
transition: scale 160ms ease-out;
|
|
6463
|
+
}
|
|
6464
|
+
|
|
6465
|
+
.sc-tile-held .sc-tile-pane {
|
|
6466
|
+
box-shadow: var(--sc-glass-sheen), var(--sc-glass-lift), var(--sc-glow);
|
|
6467
|
+
}
|
|
6468
|
+
|
|
6469
|
+
.sc-home-held,
|
|
6470
|
+
.sc-home-held .sc-tile,
|
|
6471
|
+
.sc-home-held .sc-tile * {
|
|
6472
|
+
cursor: grabbing;
|
|
6473
|
+
}
|
|
6474
|
+
|
|
6475
|
+
/* Where it would land: the tile itself, faint, on a pane of the accent's glass, beneath those on
|
|
6476
|
+
their way out of it. */
|
|
6477
|
+
.sc-home-editing .sc-tile-slot {
|
|
6478
|
+
z-index: 0;
|
|
6479
|
+
animation: sc-tile-slot-in 160ms ease-out;
|
|
6480
|
+
pointer-events: none;
|
|
6481
|
+
}
|
|
6482
|
+
|
|
6483
|
+
.sc-tile-slot .sc-tile-pane {
|
|
6484
|
+
border-color: color-mix(in srgb, var(--sc-color-accent-solid) 45%, transparent);
|
|
6485
|
+
background: color-mix(in srgb, var(--sc-color-accent-subtle) 50%, transparent);
|
|
6486
|
+
box-shadow: none;
|
|
6487
|
+
}
|
|
6488
|
+
|
|
6489
|
+
.sc-tile-slot .sc-tile-pane > * {
|
|
6490
|
+
opacity: 0.4;
|
|
6491
|
+
}
|
|
6492
|
+
|
|
6493
|
+
.sc-tile-slot .sc-tile-count {
|
|
6494
|
+
display: none;
|
|
6495
|
+
}
|
|
6496
|
+
|
|
6497
|
+
@keyframes sc-tile-slot-in {
|
|
6498
|
+
from {
|
|
6499
|
+
opacity: 0;
|
|
6500
|
+
}
|
|
6501
|
+
}
|
|
6502
|
+
|
|
6503
|
+
/* The ways on a tile while the page is arranged: off the page at its corner, the sizes across. */
|
|
6504
|
+
.sc-tile-remove {
|
|
6505
|
+
position: absolute;
|
|
6506
|
+
top: calc(var(--sc-space-2) * -1);
|
|
6507
|
+
left: calc(var(--sc-space-2) * -1);
|
|
6508
|
+
z-index: 1;
|
|
6509
|
+
display: inline-flex;
|
|
6510
|
+
align-items: center;
|
|
6511
|
+
justify-content: center;
|
|
6512
|
+
width: 1.5rem;
|
|
6513
|
+
height: 1.5rem;
|
|
6514
|
+
padding: 0;
|
|
6515
|
+
border: var(--sc-border);
|
|
6516
|
+
border-radius: var(--sc-radius-full);
|
|
6517
|
+
background: var(--sc-color-bg-raised);
|
|
6518
|
+
color: var(--sc-color-text);
|
|
6519
|
+
font-size: var(--sc-text-sm);
|
|
6520
|
+
line-height: 1;
|
|
6521
|
+
cursor: pointer;
|
|
6522
|
+
}
|
|
6523
|
+
|
|
6524
|
+
.sc-tile-remove:hover {
|
|
6525
|
+
border-color: var(--sc-color-accent);
|
|
6526
|
+
}
|
|
6527
|
+
|
|
6528
|
+
.sc-tile-sizes {
|
|
6529
|
+
position: absolute;
|
|
6530
|
+
top: var(--sc-space-1);
|
|
6531
|
+
right: var(--sc-space-1);
|
|
6532
|
+
z-index: 1;
|
|
6533
|
+
display: inline-flex;
|
|
6534
|
+
gap: 1px;
|
|
6535
|
+
margin: 0;
|
|
6536
|
+
padding: 1px;
|
|
6537
|
+
border: var(--sc-border);
|
|
6538
|
+
border-radius: var(--sc-radius-md);
|
|
6539
|
+
background: var(--sc-color-bg-raised);
|
|
6540
|
+
}
|
|
6541
|
+
|
|
6542
|
+
.sc-tile-size {
|
|
6543
|
+
display: inline-flex;
|
|
6544
|
+
align-items: center;
|
|
6545
|
+
justify-content: center;
|
|
6546
|
+
min-width: 1.5rem;
|
|
6547
|
+
height: 1.5rem;
|
|
6548
|
+
padding: 0 3px;
|
|
6549
|
+
border: 0;
|
|
6550
|
+
border-radius: var(--sc-radius-sm);
|
|
6551
|
+
background: transparent;
|
|
6552
|
+
color: var(--sc-color-text-muted);
|
|
6553
|
+
cursor: pointer;
|
|
6554
|
+
}
|
|
6555
|
+
|
|
6556
|
+
.sc-tile-size:hover {
|
|
6557
|
+
background: var(--sc-color-bg-inset);
|
|
6558
|
+
}
|
|
6559
|
+
|
|
6560
|
+
.sc-tile-size-on {
|
|
6561
|
+
background: var(--sc-color-accent-subtle);
|
|
6562
|
+
color: var(--sc-color-accent);
|
|
6563
|
+
}
|
|
6564
|
+
|
|
6565
|
+
/* Under the sizes, a widget's name ends short of them; on small cells a project stands lower. */
|
|
6566
|
+
.sc-home-editing .sc-tile-title {
|
|
6567
|
+
padding-inline-end: 4.5rem;
|
|
6568
|
+
}
|
|
6569
|
+
|
|
6570
|
+
.sc-home-editing .sc-home-grid[data-columns="4"] .sc-tile-size,
|
|
6571
|
+
.sc-home-editing .sc-home-grid[data-columns="6"] .sc-tile-size {
|
|
6572
|
+
min-width: 1.25rem;
|
|
6573
|
+
height: 1.25rem;
|
|
6574
|
+
padding: 0 2px;
|
|
6575
|
+
}
|
|
6576
|
+
|
|
6577
|
+
.sc-home-editing .sc-home-grid[data-columns="4"] .sc-tile-project:not(.sc-tile-project-card),
|
|
6578
|
+
.sc-home-editing .sc-home-grid[data-columns="6"] .sc-tile-project:not(.sc-tile-project-card) {
|
|
6579
|
+
justify-content: flex-end;
|
|
6580
|
+
}
|
|
6581
|
+
|
|
6582
|
+
/* The size's shape in small: the cells it takes, a few pixels each. */
|
|
6583
|
+
.sc-tile-size-glyph {
|
|
6584
|
+
display: block;
|
|
6585
|
+
width: calc(var(--sc-tile-w) * 2px + 4px);
|
|
6586
|
+
height: calc(var(--sc-tile-h) * 2px + 4px);
|
|
6587
|
+
border: 1.5px solid currentcolor;
|
|
6588
|
+
border-radius: 2px;
|
|
6589
|
+
}
|
|
6590
|
+
|
|
6591
|
+
@media (prefers-reduced-motion: reduce) {
|
|
6592
|
+
.sc-home-editing .sc-tile,
|
|
6593
|
+
.sc-home-editing .sc-tile-held {
|
|
6594
|
+
transition: none;
|
|
6595
|
+
}
|
|
6596
|
+
|
|
6597
|
+
.sc-home-editing .sc-tile-slot {
|
|
6598
|
+
animation: none;
|
|
6599
|
+
}
|
|
6600
|
+
}
|