@skillcdn/console 0.4.2 → 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 +120 -33
- 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 +38 -10
- package/dist/cli/format.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +22 -15
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/plugin-check.d.ts +10 -1
- package/dist/cli/plugin-check.d.ts.map +1 -1
- package/dist/cli/plugin-check.js +45 -4
- package/dist/cli/plugin-check.js.map +1 -1
- package/dist/cli/plugin-cli.d.ts +1 -1
- package/dist/cli/plugin-cli.d.ts.map +1 -1
- package/dist/cli/plugin-cli.js +80 -5
- package/dist/cli/plugin-cli.js.map +1 -1
- package/dist/cli/plugin-init.d.ts +19 -0
- package/dist/cli/plugin-init.d.ts.map +1 -1
- package/dist/cli/plugin-init.js +141 -3
- package/dist/cli/plugin-init.js.map +1 -1
- package/dist/client.d.ts +7 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +18 -5
- 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/comments.d.ts.map +1 -1
- package/dist/components/comments.js +1 -1
- package/dist/components/comments.js.map +1 -1
- package/dist/components/decision-form.d.ts +8 -1
- package/dist/components/decision-form.d.ts.map +1 -1
- package/dist/components/decision-form.js +57 -7
- package/dist/components/decision-form.js.map +1 -1
- package/dist/components/decision-list.d.ts +9 -1
- package/dist/components/decision-list.d.ts.map +1 -1
- package/dist/components/decision-list.js +53 -7
- 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/my-decisions.d.ts +2 -0
- package/dist/components/my-decisions.d.ts.map +1 -1
- package/dist/components/my-decisions.js +2 -2
- package/dist/components/my-decisions.js.map +1 -1
- 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 +2 -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 +764 -192
- package/dist/console.d.ts +10 -3
- package/dist/console.d.ts.map +1 -1
- package/dist/console.js +49 -28
- package/dist/console.js.map +1 -1
- package/dist/data.d.ts +6 -3
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +31 -7
- 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 +180 -0
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +181 -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 +176 -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 +8 -0
- package/dist/limits.d.ts.map +1 -1
- package/dist/limits.js +8 -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 +24 -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 +574 -11
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +154 -25
- 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 +49 -35
- package/docs/specs/rest.md +20 -18
- package/package.json +7 -7
- package/skills/building-a-plugin/SKILL.md +10 -9
- package/skills/planning-the-board/references/setting-up.md +2 -1
- package/skills/working-the-board/SKILL.md +3 -3
- package/src/api.ts +10 -0
- package/src/cli/cli.ts +162 -39
- package/src/cli/format.ts +54 -10
- package/src/cli/help.ts +23 -14
- package/src/cli/plugin-check.ts +68 -2
- package/src/cli/plugin-cli.ts +104 -6
- package/src/cli/plugin-init.ts +178 -3
- package/src/client.ts +36 -9
- package/src/compat.ts +1 -1
- package/src/components/board.tsx +3 -3
- package/src/components/comments.tsx +1 -0
- package/src/components/decision-form.tsx +166 -29
- package/src/components/decision-list.tsx +116 -15
- 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/my-decisions.tsx +4 -1
- 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 +9 -1
- package/src/components/ui.tsx +6 -2
- package/src/connect-page.tsx +5 -6
- package/src/console.tsx +98 -42
- package/src/data.ts +41 -11
- package/src/docs-page.tsx +6 -5
- package/src/home-tiles.ts +438 -0
- package/src/i18n/en.ts +185 -0
- package/src/i18n/index.ts +17 -14
- package/src/i18n/ko.ts +181 -3
- package/src/index.ts +7 -5
- package/src/limits.ts +8 -0
- package/src/plugin/bridge.ts +77 -1
- package/src/plugin/capabilities.ts +17 -1
- package/src/plugin/context.ts +24 -2
- 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 +190 -28
- package/src/styles/console.css +764 -192
- package/src/use-action.ts +16 -7
- package/src/vocabulary.ts +4 -0
- package/template/plugin/console-plugin.json +3 -1
- package/template/plugin/package.json +3 -3
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);
|
|
@@ -2980,7 +2992,8 @@ select.sc-input {
|
|
|
2980
2992
|
}
|
|
2981
2993
|
}
|
|
2982
2994
|
|
|
2983
|
-
.sc-comment-files
|
|
2995
|
+
.sc-comment-files,
|
|
2996
|
+
.sc-decision-files {
|
|
2984
2997
|
display: grid;
|
|
2985
2998
|
gap: var(--sc-space-2);
|
|
2986
2999
|
margin: 0;
|
|
@@ -2990,6 +3003,7 @@ select.sc-input {
|
|
|
2990
3003
|
}
|
|
2991
3004
|
|
|
2992
3005
|
.sc-comment-picture,
|
|
3006
|
+
.sc-decision-picture,
|
|
2993
3007
|
.sc-artifact-picture {
|
|
2994
3008
|
display: grid;
|
|
2995
3009
|
gap: var(--sc-space-1);
|
|
@@ -3828,11 +3842,12 @@ select.sc-input {
|
|
|
3828
3842
|
|
|
3829
3843
|
/* The title of a bar with more days in the week runs along the bar as far as its days reach,
|
|
3830
3844
|
less the room of its end, instead of stopping at the first day's edge: above every piece,
|
|
3831
|
-
the one under the pointer included, and under the cards
|
|
3832
|
-
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. */
|
|
3833
3848
|
.sc-calendar-task-title-spanning {
|
|
3834
3849
|
position: relative;
|
|
3835
|
-
z-index:
|
|
3850
|
+
z-index: 2;
|
|
3836
3851
|
flex: none;
|
|
3837
3852
|
max-width: calc(var(--sc-span, 1) * 100% - 2.25rem);
|
|
3838
3853
|
pointer-events: none;
|
|
@@ -3916,14 +3931,6 @@ select.sc-input {
|
|
|
3916
3931
|
|
|
3917
3932
|
/* The mark hangs in the margin, so that what wraps onto a second line, a badge most often,
|
|
3918
3933
|
starts under the name rather than under the mark. */
|
|
3919
|
-
.sc-project-head:has(> .sc-mark-md) {
|
|
3920
|
-
padding-inline-start: calc(2rem + var(--sc-space-3));
|
|
3921
|
-
}
|
|
3922
|
-
|
|
3923
|
-
.sc-project-head > .sc-mark-md {
|
|
3924
|
-
margin-inline-start: calc(-2rem - var(--sc-space-3));
|
|
3925
|
-
}
|
|
3926
|
-
|
|
3927
3934
|
.sc-mark-lg {
|
|
3928
3935
|
width: 3rem;
|
|
3929
3936
|
height: 3rem;
|
|
@@ -4559,7 +4566,13 @@ select.sc-input {
|
|
|
4559
4566
|
}
|
|
4560
4567
|
|
|
4561
4568
|
.sc-main {
|
|
4562
|
-
|
|
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);
|
|
4563
4576
|
}
|
|
4564
4577
|
|
|
4565
4578
|
.sc-page-title,
|
|
@@ -5153,13 +5166,14 @@ select.sc-input {
|
|
|
5153
5166
|
}
|
|
5154
5167
|
|
|
5155
5168
|
/* A goal's page reads as the board does: the facts in a row at its head, then a switch between
|
|
5156
|
-
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. */
|
|
5157
5172
|
.sc-goal-page {
|
|
5158
5173
|
display: flex;
|
|
5159
5174
|
flex: 1 1 0;
|
|
5160
5175
|
flex-direction: column;
|
|
5161
5176
|
gap: var(--sc-space-4);
|
|
5162
|
-
min-height: 0;
|
|
5163
5177
|
}
|
|
5164
5178
|
|
|
5165
5179
|
.sc-goal-header {
|
|
@@ -5249,7 +5263,6 @@ select.sc-input {
|
|
|
5249
5263
|
display: flex;
|
|
5250
5264
|
flex: 1 1 0;
|
|
5251
5265
|
flex-direction: column;
|
|
5252
|
-
min-height: 0;
|
|
5253
5266
|
}
|
|
5254
5267
|
|
|
5255
5268
|
.sc-goal-view-list {
|
|
@@ -5893,27 +5906,140 @@ select.sc-input {
|
|
|
5893
5906
|
margin-top: 0.25em;
|
|
5894
5907
|
}
|
|
5895
5908
|
|
|
5896
|
-
|
|
5897
|
-
|
|
5898
|
-
|
|
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;
|
|
5899
5913
|
}
|
|
5900
5914
|
|
|
5901
|
-
|
|
5902
|
-
|
|
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);
|
|
5903
5919
|
}
|
|
5904
5920
|
|
|
5905
|
-
.sc-plugin-
|
|
5906
|
-
|
|
5907
|
-
font-size: var(--sc-text-sm);
|
|
5921
|
+
.sc-plugin-capabilities + .sc-plugin-capabilities {
|
|
5922
|
+
margin-top: var(--sc-space-3);
|
|
5908
5923
|
}
|
|
5909
5924
|
|
|
5910
|
-
|
|
5911
|
-
|
|
5912
|
-
|
|
5913
|
-
|
|
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);
|
|
5914
5930
|
margin: 0;
|
|
5915
|
-
|
|
5916
|
-
|
|
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;
|
|
5917
6043
|
}
|
|
5918
6044
|
|
|
5919
6045
|
.sc-plugin-codes {
|
|
@@ -6026,3 +6152,449 @@ select.sc-input {
|
|
|
6026
6152
|
grid-template-columns: minmax(0, 1fr);
|
|
6027
6153
|
}
|
|
6028
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
|
+
}
|