@igstack/app-catalog-frontend-core 6.9.0 → 6.10.1
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/dist/esm/__tests__/modules/appCatalog/ui/detail/CommunitySection.feed.test.d.ts +0 -0
- package/dist/esm/__tests__/modules/appCatalog/ui/detail/CommunitySection.help.test.d.ts +0 -0
- package/dist/esm/__tests__/modules/appCatalog/ui/detail/CommunitySection.input.test.d.ts +0 -0
- package/dist/esm/__tests__/modules/appCatalog/ui/detail/composeComments.test.d.ts +1 -0
- package/dist/esm/__tests__/ui/detail/CommunityInput.test.d.ts +1 -0
- package/dist/esm/modules/appCatalog/hooks/useUpdateApp.d.ts +8 -0
- package/dist/esm/modules/appCatalog/ui/catalog/AppDetailPanel.js +1 -0
- package/dist/esm/modules/appCatalog/ui/catalog/AppDetailPanel.js.map +1 -1
- package/dist/esm/modules/appCatalog/ui/detail/AppDetails.js +237 -218
- package/dist/esm/modules/appCatalog/ui/detail/AppDetails.js.map +1 -1
- package/dist/esm/modules/appCatalog/ui/detail/CommentsFeed.d.ts +17 -0
- package/dist/esm/modules/appCatalog/ui/detail/CommentsFeed.js +187 -0
- package/dist/esm/modules/appCatalog/ui/detail/CommentsFeed.js.map +1 -0
- package/dist/esm/modules/appCatalog/ui/detail/CommentsHelp.d.ts +9 -0
- package/dist/esm/modules/appCatalog/ui/detail/CommentsHelp.js +91 -0
- package/dist/esm/modules/appCatalog/ui/detail/CommentsHelp.js.map +1 -0
- package/dist/esm/modules/appCatalog/ui/detail/CommunityInput.d.ts +17 -0
- package/dist/esm/modules/appCatalog/ui/detail/CommunityInput.js +328 -0
- package/dist/esm/modules/appCatalog/ui/detail/CommunityInput.js.map +1 -0
- package/dist/esm/modules/appCatalog/ui/detail/CommunitySection.d.ts +15 -0
- package/dist/esm/modules/appCatalog/ui/detail/CommunitySection.js +26 -0
- package/dist/esm/modules/appCatalog/ui/detail/CommunitySection.js.map +1 -0
- package/dist/esm/modules/appCatalog/ui/detail/DetailTabs.d.ts +8 -19
- package/dist/esm/modules/appCatalog/ui/detail/DetailTabs.js +49 -37
- package/dist/esm/modules/appCatalog/ui/detail/DetailTabs.js.map +1 -1
- package/dist/esm/modules/appCatalog/ui/detail/communityDraft.d.ts +30 -0
- package/dist/esm/modules/appCatalog/ui/detail/communityDraft.js +50 -0
- package/dist/esm/modules/appCatalog/ui/detail/communityDraft.js.map +1 -0
- package/dist/esm/modules/appCatalog/ui/detail/communityError.d.ts +6 -0
- package/dist/esm/modules/appCatalog/ui/detail/communityError.js +8 -0
- package/dist/esm/modules/appCatalog/ui/detail/communityError.js.map +1 -0
- package/dist/esm/modules/appCatalog/ui/detail/composeComments.d.ts +27 -0
- package/dist/esm/modules/appCatalog/ui/detail/composeComments.js +66 -0
- package/dist/esm/modules/appCatalog/ui/detail/composeComments.js.map +1 -0
- package/dist/esm/modules/appCatalog/ui/detail/usePendingCount.d.ts +11 -0
- package/dist/esm/modules/appCatalog/ui/detail/usePendingCount.js +15 -0
- package/dist/esm/modules/appCatalog/ui/detail/usePendingCount.js.map +1 -0
- package/dist/esm/modules/extensions/features/resourceDetail.d.ts +38 -0
- package/dist/esm/modules/extensions/features/resourceDetail.js +4 -0
- package/dist/esm/modules/extensions/features/resourceDetail.js.map +1 -1
- package/dist/esm/modules/extensions/index.d.ts +1 -1
- package/dist/esm/modules/extensions/index.js.map +1 -1
- package/dist/index.css +501 -49
- package/package.json +4 -4
- package/src/__tests__/modules/appCatalog/ui/catalog/AppDetailPanel.appSwitch.test.tsx +5 -2
- package/src/__tests__/modules/appCatalog/ui/catalog/AppDetailPanel.enter.test.tsx +5 -2
- package/src/__tests__/modules/appCatalog/ui/detail/AppDetails.background.test.tsx +9 -10
- package/src/__tests__/modules/appCatalog/ui/detail/AppDetails.behindThisCard.test.tsx +402 -0
- package/src/__tests__/modules/appCatalog/ui/detail/AppDetails.doorAndTabs.test.tsx +8 -4
- package/src/__tests__/modules/appCatalog/ui/detail/AppDetails.escape.test.tsx +5 -2
- package/src/__tests__/modules/appCatalog/ui/detail/AppDetails.knowMore.test.tsx +175 -0
- package/src/__tests__/modules/appCatalog/ui/detail/AppDetails.sectionOrder.test.tsx +5 -2
- package/src/__tests__/modules/appCatalog/ui/detail/AppDetails.subResourceTab.test.tsx +5 -2
- package/src/__tests__/modules/appCatalog/ui/detail/AppDetails.tags.test.tsx +5 -2
- package/src/__tests__/modules/appCatalog/ui/detail/CommunitySection.feed.test.tsx +281 -0
- package/src/__tests__/modules/appCatalog/ui/detail/CommunitySection.help.test.tsx +179 -0
- package/src/__tests__/modules/appCatalog/ui/detail/CommunitySection.input.test.tsx +423 -0
- package/src/__tests__/modules/appCatalog/ui/detail/composeComments.test.ts +170 -0
- package/src/__tests__/ui/detail/CommunityInput.test.tsx +39 -0
- package/src/index.css +501 -49
- package/src/modules/appCatalog/ui/detail/AppDetails.tsx +292 -289
- package/src/modules/appCatalog/ui/detail/CommentsFeed.tsx +254 -0
- package/src/modules/appCatalog/ui/detail/CommentsHelp.tsx +102 -0
- package/src/modules/appCatalog/ui/detail/CommunityInput.tsx +419 -0
- package/src/modules/appCatalog/ui/detail/CommunitySection.tsx +41 -0
- package/src/modules/appCatalog/ui/detail/DetailTabs.tsx +77 -71
- package/src/modules/appCatalog/ui/detail/communityDraft.ts +80 -0
- package/src/modules/appCatalog/ui/detail/communityError.ts +10 -0
- package/src/modules/appCatalog/ui/detail/composeComments.ts +103 -0
- package/src/modules/appCatalog/ui/detail/usePendingCount.ts +26 -0
- package/src/modules/extensions/features/resourceDetail.ts +28 -0
- package/src/modules/extensions/index.ts +2 -0
- package/dist/esm/modules/appCatalog/ui/detail/FeedbackSection.d.ts +0 -13
- package/dist/esm/modules/appCatalog/ui/detail/FeedbackSection.js +0 -433
- package/dist/esm/modules/appCatalog/ui/detail/FeedbackSection.js.map +0 -1
- package/src/__tests__/modules/appCatalog/ui/detail/FeedbackSection.emptyState.test.tsx +0 -181
- package/src/__tests__/modules/appCatalog/ui/detail/FeedbackSection.reviewStatus.test.tsx +0 -131
- package/src/modules/appCatalog/ui/detail/FeedbackSection.tsx +0 -605
- /package/dist/esm/__tests__/modules/appCatalog/ui/detail/{FeedbackSection.emptyState.test.d.ts → AppDetails.behindThisCard.test.d.ts} +0 -0
- /package/dist/esm/__tests__/modules/appCatalog/ui/detail/{FeedbackSection.reviewStatus.test.d.ts → AppDetails.knowMore.test.d.ts} +0 -0
package/src/index.css
CHANGED
|
@@ -249,38 +249,27 @@
|
|
|
249
249
|
padding-left: 1.25rem;
|
|
250
250
|
}
|
|
251
251
|
|
|
252
|
-
/*
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
override. Verify any change by measurement, not by eye: 60%/55% looks fine and
|
|
261
|
-
still fails. */
|
|
262
|
-
.comment-chip {
|
|
263
|
-
display: inline-flex;
|
|
264
|
-
align-items: center;
|
|
265
|
-
gap: 0.25rem;
|
|
252
|
+
/* Comment badges. Plain CSS rather than utilities: there is no success or
|
|
253
|
+
pending token in the palette, so each tints a chart colour, which already
|
|
254
|
+
shifts for dark mode. The text is mixed toward the foreground so it stays
|
|
255
|
+
readable at 10.5px in both themes: an untinted chart colour on its own pale
|
|
256
|
+
ground measured under 4.5:1. Verify any change by measurement, not by eye. */
|
|
257
|
+
.comment__badge {
|
|
258
|
+
margin-left: 0.375rem;
|
|
259
|
+
padding: 0 0.4375rem;
|
|
266
260
|
border-radius: 999px;
|
|
267
|
-
|
|
268
|
-
font-size: 0.6875rem;
|
|
261
|
+
font-size: 0.65625rem;
|
|
269
262
|
font-weight: 500;
|
|
270
|
-
line-height:
|
|
263
|
+
line-height: 1rem;
|
|
271
264
|
white-space: nowrap;
|
|
272
265
|
}
|
|
273
|
-
.
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
background: color-mix(in oklab, var(--chart-3) 16%, var(--card));
|
|
277
|
-
border: 1px solid color-mix(in oklab, var(--chart-3) 35%, var(--card));
|
|
266
|
+
.comment__badge.is-pending {
|
|
267
|
+
color: color-mix(in oklab, var(--chart-1) 62%, var(--foreground));
|
|
268
|
+
background: color-mix(in oklab, var(--chart-1) 12%, var(--card));
|
|
278
269
|
}
|
|
279
|
-
.
|
|
280
|
-
color: var(--
|
|
281
|
-
background: var(--
|
|
282
|
-
border: 1px solid var(--border);
|
|
283
|
-
font-weight: 400;
|
|
270
|
+
.comment__badge.is-used {
|
|
271
|
+
color: color-mix(in oklab, var(--chart-3) 50%, var(--foreground));
|
|
272
|
+
background: color-mix(in oklab, var(--chart-3) 13%, var(--card));
|
|
284
273
|
}
|
|
285
274
|
|
|
286
275
|
/* One register for every section label inside the detail card.
|
|
@@ -431,16 +420,112 @@
|
|
|
431
420
|
|
|
432
421
|
/* The tab strip. Horizontally scrollable rather than wrapping: a wrapped strip
|
|
433
422
|
changes the band's height from one entry to the next. */
|
|
423
|
+
.detail-tabs-row {
|
|
424
|
+
display: flex;
|
|
425
|
+
border-bottom: 1px solid var(--border);
|
|
426
|
+
}
|
|
434
427
|
.detail-tabs {
|
|
435
428
|
display: flex;
|
|
429
|
+
flex: 1;
|
|
430
|
+
min-width: 0;
|
|
436
431
|
gap: 2px;
|
|
437
|
-
border-bottom: 1px solid var(--border);
|
|
438
432
|
overflow-x: auto;
|
|
439
433
|
scrollbar-width: none;
|
|
434
|
+
scroll-behavior: smooth;
|
|
440
435
|
}
|
|
441
436
|
.detail-tabs::-webkit-scrollbar {
|
|
442
437
|
display: none;
|
|
443
438
|
}
|
|
439
|
+
/* Outside the scrolling tablist, so the button never scrolls out of view. */
|
|
440
|
+
.detail-tabs-trailing {
|
|
441
|
+
flex: none;
|
|
442
|
+
align-self: center;
|
|
443
|
+
padding-left: 0.75rem;
|
|
444
|
+
}
|
|
445
|
+
.detail-share {
|
|
446
|
+
border: 1px solid var(--border);
|
|
447
|
+
border-radius: 999px;
|
|
448
|
+
background: var(--background);
|
|
449
|
+
color: var(--foreground);
|
|
450
|
+
font-size: 0.8125rem;
|
|
451
|
+
padding: 0.25rem 0.75rem;
|
|
452
|
+
white-space: nowrap;
|
|
453
|
+
cursor: pointer;
|
|
454
|
+
transition:
|
|
455
|
+
color 0.14s ease-out,
|
|
456
|
+
border-color 0.14s ease-out;
|
|
457
|
+
}
|
|
458
|
+
/* Below 640px, render the Share button compact: icon only, text visually hidden. */
|
|
459
|
+
@media (max-width: 639px) {
|
|
460
|
+
.detail-share {
|
|
461
|
+
padding: 0.4375rem;
|
|
462
|
+
width: 36px;
|
|
463
|
+
height: 36px;
|
|
464
|
+
display: inline-flex;
|
|
465
|
+
align-items: center;
|
|
466
|
+
justify-content: center;
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
.detail-share:hover {
|
|
470
|
+
color: color-mix(in oklab, var(--primary) 85%, black);
|
|
471
|
+
border-color: color-mix(in oklab, var(--primary) 85%, black);
|
|
472
|
+
}
|
|
473
|
+
.detail-share:focus-visible {
|
|
474
|
+
outline: 2px solid color-mix(in oklab, var(--primary) 85%, black);
|
|
475
|
+
outline-offset: 2px;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
/* Behind this card: one left-aligned reading column. The input and its
|
|
479
|
+
Comments come first; each later group sits under a hairline with generous
|
|
480
|
+
room either side, and a plain title. */
|
|
481
|
+
.behind-panel {
|
|
482
|
+
max-width: 62ch;
|
|
483
|
+
}
|
|
484
|
+
.behind-group + .behind-group {
|
|
485
|
+
margin-top: 3.5rem;
|
|
486
|
+
padding-top: 2.25rem;
|
|
487
|
+
border-top: 1px solid var(--border);
|
|
488
|
+
}
|
|
489
|
+
.behind-group__title {
|
|
490
|
+
font-size: 0.9375rem;
|
|
491
|
+
font-weight: 600;
|
|
492
|
+
color: var(--foreground);
|
|
493
|
+
margin-bottom: 0.875rem;
|
|
494
|
+
}
|
|
495
|
+
.behind-dates {
|
|
496
|
+
margin-top: 0.375rem;
|
|
497
|
+
font-size: 0.78125rem;
|
|
498
|
+
color: var(--muted-foreground);
|
|
499
|
+
}
|
|
500
|
+
/* Touch targets: inline links in Behind get ≥24px hit area on coarse pointers. */
|
|
501
|
+
@media (pointer: coarse) {
|
|
502
|
+
.behind-group a {
|
|
503
|
+
padding-block: 0.375rem;
|
|
504
|
+
display: inline-block;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
.behind-ai__label {
|
|
508
|
+
font-size: 0.75rem;
|
|
509
|
+
color: var(--muted-foreground);
|
|
510
|
+
margin: 0.5rem 0 0.25rem;
|
|
511
|
+
}
|
|
512
|
+
.behind-ai {
|
|
513
|
+
font-size: 0.8125rem;
|
|
514
|
+
white-space: pre-wrap;
|
|
515
|
+
color: var(--muted-foreground);
|
|
516
|
+
background: var(--muted);
|
|
517
|
+
border-radius: 0.5rem;
|
|
518
|
+
padding: 0.625rem 0.75rem;
|
|
519
|
+
margin-bottom: 0.5rem;
|
|
520
|
+
}
|
|
521
|
+
.behind-card-source {
|
|
522
|
+
margin-top: 2rem;
|
|
523
|
+
font-size: 0.75rem;
|
|
524
|
+
color: var(--muted-foreground);
|
|
525
|
+
}
|
|
526
|
+
.behind-card-source:empty {
|
|
527
|
+
display: none;
|
|
528
|
+
}
|
|
444
529
|
.detail-tab {
|
|
445
530
|
position: relative;
|
|
446
531
|
display: inline-flex;
|
|
@@ -516,27 +601,6 @@
|
|
|
516
601
|
background: var(--chart-4, oklch(0.72 0.16 70));
|
|
517
602
|
box-shadow: 0 0 0 2px
|
|
518
603
|
color-mix(in oklab, var(--chart-4, oklch(0.72 0.16 70)) 25%, transparent);
|
|
519
|
-
|
|
520
|
-
/* How many items are still waiting on a maintainer. Amber rather than red: an entry
|
|
521
|
-
with open feedback is disputed, not broken, and red is already the withdraw
|
|
522
|
-
affordance in the same thread. 5.45:1 light, 8.08:1 dark. */
|
|
523
|
-
.feedback-open-count {
|
|
524
|
-
display: inline-flex;
|
|
525
|
-
align-items: center;
|
|
526
|
-
justify-content: center;
|
|
527
|
-
min-width: 1.15rem;
|
|
528
|
-
border-radius: 999px;
|
|
529
|
-
padding: 0.15rem 0.35rem;
|
|
530
|
-
font-size: 0.6875rem;
|
|
531
|
-
font-weight: 600;
|
|
532
|
-
line-height: 1;
|
|
533
|
-
letter-spacing: normal;
|
|
534
|
-
text-transform: none;
|
|
535
|
-
white-space: nowrap;
|
|
536
|
-
color: color-mix(in oklab, var(--chart-4) 45%, var(--foreground));
|
|
537
|
-
background: color-mix(in oklab, var(--chart-4) 18%, var(--card));
|
|
538
|
-
border: 1px solid color-mix(in oklab, var(--chart-4) 38%, var(--card));
|
|
539
|
-
}
|
|
540
604
|
}
|
|
541
605
|
|
|
542
606
|
/* tw-animate-css ships no reduced-motion rules of its own, so honour the
|
|
@@ -551,3 +615,391 @@
|
|
|
551
615
|
scroll-behavior: auto !important;
|
|
552
616
|
}
|
|
553
617
|
}
|
|
618
|
+
|
|
619
|
+
/* Comments on Behind this card: the heading with its help, then one feed.
|
|
620
|
+
A comment is a small meta line above the words, like a thread. */
|
|
621
|
+
.comments-head {
|
|
622
|
+
position: relative;
|
|
623
|
+
display: flex;
|
|
624
|
+
align-items: center;
|
|
625
|
+
gap: 0.375rem;
|
|
626
|
+
margin-bottom: 0.875rem;
|
|
627
|
+
}
|
|
628
|
+
.comments-head .behind-group__title {
|
|
629
|
+
margin-bottom: 0;
|
|
630
|
+
}
|
|
631
|
+
.comments-help-button {
|
|
632
|
+
display: grid;
|
|
633
|
+
place-items: center;
|
|
634
|
+
width: 24px;
|
|
635
|
+
height: 24px;
|
|
636
|
+
border-radius: 999px;
|
|
637
|
+
color: var(--muted-foreground);
|
|
638
|
+
}
|
|
639
|
+
.comments-help-button:hover,
|
|
640
|
+
.comments-help-button[aria-expanded='true'] {
|
|
641
|
+
color: var(--foreground);
|
|
642
|
+
}
|
|
643
|
+
.comments-help-button:focus-visible {
|
|
644
|
+
outline: 2px solid var(--ring);
|
|
645
|
+
outline-offset: 1px;
|
|
646
|
+
}
|
|
647
|
+
/* Touch targets: ≥44×44px on coarse pointers, without moving the icon. */
|
|
648
|
+
@media (pointer: coarse) {
|
|
649
|
+
.comments-help-button {
|
|
650
|
+
width: 44px;
|
|
651
|
+
height: 44px;
|
|
652
|
+
margin: -10px;
|
|
653
|
+
}
|
|
654
|
+
}
|
|
655
|
+
.comments-help {
|
|
656
|
+
position: absolute;
|
|
657
|
+
top: 100%;
|
|
658
|
+
left: 0;
|
|
659
|
+
z-index: 20;
|
|
660
|
+
width: min(24rem, 100%);
|
|
661
|
+
margin-top: 0.375rem;
|
|
662
|
+
padding: 0.75rem 0.875rem;
|
|
663
|
+
border: 1px solid var(--border);
|
|
664
|
+
border-radius: 10px;
|
|
665
|
+
background: var(--popover);
|
|
666
|
+
color: var(--popover-foreground);
|
|
667
|
+
box-shadow: 0 8px 24px rgb(0 0 0 / 0.08);
|
|
668
|
+
font-size: 0.8125rem;
|
|
669
|
+
line-height: 1.5;
|
|
670
|
+
}
|
|
671
|
+
.comments-help[hidden] {
|
|
672
|
+
display: none;
|
|
673
|
+
}
|
|
674
|
+
.comments-help__title {
|
|
675
|
+
font-weight: 600;
|
|
676
|
+
margin-bottom: 0.375rem;
|
|
677
|
+
}
|
|
678
|
+
.comments-help ul {
|
|
679
|
+
list-style: disc;
|
|
680
|
+
margin: 0 0 0.5rem;
|
|
681
|
+
padding-left: 1.125rem;
|
|
682
|
+
}
|
|
683
|
+
.comments-help__note {
|
|
684
|
+
color: var(--muted-foreground);
|
|
685
|
+
}
|
|
686
|
+
.comments {
|
|
687
|
+
display: grid;
|
|
688
|
+
gap: 1.375rem;
|
|
689
|
+
margin: 0;
|
|
690
|
+
padding: 0;
|
|
691
|
+
list-style: none;
|
|
692
|
+
}
|
|
693
|
+
.comment__meta {
|
|
694
|
+
display: flex;
|
|
695
|
+
flex-wrap: wrap;
|
|
696
|
+
align-items: center;
|
|
697
|
+
gap: 0 0.3rem;
|
|
698
|
+
font-size: 0.71875rem;
|
|
699
|
+
line-height: 1.3;
|
|
700
|
+
color: var(--muted-foreground);
|
|
701
|
+
}
|
|
702
|
+
.comment__who {
|
|
703
|
+
font-weight: 500;
|
|
704
|
+
color: color-mix(in oklab, var(--muted-foreground) 60%, var(--foreground));
|
|
705
|
+
}
|
|
706
|
+
.comment__text {
|
|
707
|
+
margin-top: 1px;
|
|
708
|
+
font-size: 0.9375rem;
|
|
709
|
+
line-height: 1.5;
|
|
710
|
+
color: var(--foreground);
|
|
711
|
+
white-space: pre-wrap;
|
|
712
|
+
}
|
|
713
|
+
.comment__text.is-empty {
|
|
714
|
+
font-style: italic;
|
|
715
|
+
color: var(--muted-foreground);
|
|
716
|
+
}
|
|
717
|
+
.comment__reply {
|
|
718
|
+
margin-top: 0.25rem;
|
|
719
|
+
font-size: 0.84375rem;
|
|
720
|
+
color: var(--muted-foreground);
|
|
721
|
+
white-space: pre-wrap;
|
|
722
|
+
}
|
|
723
|
+
.comment__actions {
|
|
724
|
+
display: flex;
|
|
725
|
+
gap: 0.75rem;
|
|
726
|
+
margin-top: 0.25rem;
|
|
727
|
+
font-size: 0.75rem;
|
|
728
|
+
color: var(--muted-foreground);
|
|
729
|
+
}
|
|
730
|
+
.comment__actions button {
|
|
731
|
+
text-decoration: underline;
|
|
732
|
+
}
|
|
733
|
+
.comment__actions button:hover {
|
|
734
|
+
color: var(--foreground);
|
|
735
|
+
}
|
|
736
|
+
.comment__actions button.is-destructive:hover {
|
|
737
|
+
color: var(--destructive);
|
|
738
|
+
}
|
|
739
|
+
.community-shots {
|
|
740
|
+
display: flex;
|
|
741
|
+
flex-wrap: wrap;
|
|
742
|
+
gap: 0.375rem;
|
|
743
|
+
margin-top: 0.375rem;
|
|
744
|
+
}
|
|
745
|
+
.community-shots img {
|
|
746
|
+
display: block;
|
|
747
|
+
width: 48px;
|
|
748
|
+
height: 36px;
|
|
749
|
+
object-fit: cover;
|
|
750
|
+
border-radius: 5px;
|
|
751
|
+
border: 1px solid var(--border);
|
|
752
|
+
}
|
|
753
|
+
.community-shots a:hover img {
|
|
754
|
+
border-color: var(--ring);
|
|
755
|
+
}
|
|
756
|
+
.comments-skeleton {
|
|
757
|
+
display: grid;
|
|
758
|
+
gap: 1.375rem;
|
|
759
|
+
}
|
|
760
|
+
.comments-skeleton__item {
|
|
761
|
+
display: grid;
|
|
762
|
+
gap: 0.375rem;
|
|
763
|
+
}
|
|
764
|
+
.comments-skeleton__item::before,
|
|
765
|
+
.comments-skeleton__item::after {
|
|
766
|
+
content: '';
|
|
767
|
+
height: 1em;
|
|
768
|
+
background: var(--muted);
|
|
769
|
+
border-radius: 4px;
|
|
770
|
+
}
|
|
771
|
+
.comments-skeleton__item::before {
|
|
772
|
+
width: 30%;
|
|
773
|
+
}
|
|
774
|
+
.comments-skeleton__item::after {
|
|
775
|
+
width: 80%;
|
|
776
|
+
margin-top: 0.125rem;
|
|
777
|
+
}
|
|
778
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
779
|
+
.comments-skeleton__item::before,
|
|
780
|
+
.comments-skeleton__item::after {
|
|
781
|
+
animation: skeleton-shimmer 2s ease-in-out infinite;
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
@keyframes skeleton-shimmer {
|
|
785
|
+
0%,
|
|
786
|
+
100% {
|
|
787
|
+
opacity: 1;
|
|
788
|
+
}
|
|
789
|
+
50% {
|
|
790
|
+
opacity: 0.5;
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
.comments-empty {
|
|
794
|
+
font-size: 0.9375rem;
|
|
795
|
+
line-height: 1.5;
|
|
796
|
+
color: var(--muted-foreground);
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
/* "Know more?" — the input at the top of Behind this card */
|
|
800
|
+
.know-more {
|
|
801
|
+
margin-bottom: 3rem;
|
|
802
|
+
}
|
|
803
|
+
/* "Share what you know" points here; a dragged file shows where it lands. */
|
|
804
|
+
.know-more.is-flash .know-more-field textarea:not(.know-more-mirror),
|
|
805
|
+
.know-more[data-drop] .know-more-field textarea:not(.know-more-mirror) {
|
|
806
|
+
border-color: color-mix(in oklab, var(--primary) 85%, black);
|
|
807
|
+
box-shadow: 0 0 0 4px color-mix(in oklab, var(--primary) 25%, transparent);
|
|
808
|
+
}
|
|
809
|
+
.know-more[data-drop] .know-more-field textarea:not(.know-more-mirror) {
|
|
810
|
+
border-style: dashed;
|
|
811
|
+
}
|
|
812
|
+
.know-more-field {
|
|
813
|
+
position: relative;
|
|
814
|
+
display: flex;
|
|
815
|
+
align-items: flex-end;
|
|
816
|
+
gap: 0.5rem;
|
|
817
|
+
}
|
|
818
|
+
.know-more-field textarea:not(.know-more-mirror) {
|
|
819
|
+
flex: 1;
|
|
820
|
+
min-height: 0;
|
|
821
|
+
resize: none;
|
|
822
|
+
font: inherit;
|
|
823
|
+
font-size: 0.9375rem;
|
|
824
|
+
line-height: 20px;
|
|
825
|
+
padding: 9px 14px;
|
|
826
|
+
border: 1px solid var(--border);
|
|
827
|
+
border-radius: 10px;
|
|
828
|
+
background: var(--card);
|
|
829
|
+
outline: none;
|
|
830
|
+
transition:
|
|
831
|
+
height 0.22s cubic-bezier(0.2, 0.8, 0.2, 1),
|
|
832
|
+
border-color 0.15s,
|
|
833
|
+
background 0.15s,
|
|
834
|
+
box-shadow 0.15s;
|
|
835
|
+
}
|
|
836
|
+
/* iOS zooms inputs under 16px on mobile; use 16px below 640px. */
|
|
837
|
+
@media (max-width: 639px) {
|
|
838
|
+
.know-more-field textarea:not(.know-more-mirror) {
|
|
839
|
+
font-size: 1rem;
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
.know-more-field textarea:not(.know-more-mirror):focus {
|
|
843
|
+
border-color: var(--ring);
|
|
844
|
+
box-shadow: 0 0 0 3px color-mix(in oklab, var(--ring) 25%, transparent);
|
|
845
|
+
}
|
|
846
|
+
.know-more-field textarea:not(.know-more-mirror)::placeholder {
|
|
847
|
+
white-space: nowrap;
|
|
848
|
+
overflow: hidden;
|
|
849
|
+
text-overflow: ellipsis;
|
|
850
|
+
}
|
|
851
|
+
.know-more-clip {
|
|
852
|
+
flex: none;
|
|
853
|
+
display: grid;
|
|
854
|
+
place-items: center;
|
|
855
|
+
width: 40px;
|
|
856
|
+
height: 40px;
|
|
857
|
+
border-radius: 10px;
|
|
858
|
+
color: var(--muted-foreground);
|
|
859
|
+
opacity: 0.6;
|
|
860
|
+
transition: opacity 0.15s;
|
|
861
|
+
}
|
|
862
|
+
/* Touch targets: ≥44×44px on coarse pointers. */
|
|
863
|
+
@media (pointer: coarse) {
|
|
864
|
+
.know-more-clip {
|
|
865
|
+
width: 44px;
|
|
866
|
+
height: 44px;
|
|
867
|
+
}
|
|
868
|
+
}
|
|
869
|
+
.know-more-clip:hover:not(:disabled),
|
|
870
|
+
.know-more-clip:focus-visible {
|
|
871
|
+
opacity: 1;
|
|
872
|
+
background: var(--muted);
|
|
873
|
+
}
|
|
874
|
+
.know-more-clip:disabled {
|
|
875
|
+
cursor: not-allowed;
|
|
876
|
+
opacity: 0.3;
|
|
877
|
+
}
|
|
878
|
+
.know-more-thumbs {
|
|
879
|
+
display: flex;
|
|
880
|
+
flex-wrap: wrap;
|
|
881
|
+
gap: 0.5rem;
|
|
882
|
+
margin: 0 0 0.5rem;
|
|
883
|
+
padding: 0;
|
|
884
|
+
list-style: none;
|
|
885
|
+
}
|
|
886
|
+
.know-more-thumb {
|
|
887
|
+
position: relative;
|
|
888
|
+
width: 56px;
|
|
889
|
+
height: 42px;
|
|
890
|
+
overflow: hidden;
|
|
891
|
+
border-radius: 6px;
|
|
892
|
+
border: 1px solid var(--border);
|
|
893
|
+
}
|
|
894
|
+
.know-more-thumb img {
|
|
895
|
+
display: block;
|
|
896
|
+
width: 100%;
|
|
897
|
+
height: 100%;
|
|
898
|
+
object-fit: cover;
|
|
899
|
+
}
|
|
900
|
+
.know-more-thumb button {
|
|
901
|
+
position: absolute;
|
|
902
|
+
top: 1px;
|
|
903
|
+
right: 1px;
|
|
904
|
+
display: grid;
|
|
905
|
+
place-items: center;
|
|
906
|
+
width: 16px;
|
|
907
|
+
height: 16px;
|
|
908
|
+
border-radius: 999px;
|
|
909
|
+
background: rgb(0 0 0 / 0.55);
|
|
910
|
+
color: white;
|
|
911
|
+
}
|
|
912
|
+
/* Always there, so the input never shifts; grey until there is something to send. */
|
|
913
|
+
.know-more-send {
|
|
914
|
+
flex: none;
|
|
915
|
+
height: 40px;
|
|
916
|
+
padding-inline: 1rem;
|
|
917
|
+
border-radius: 10px;
|
|
918
|
+
font-size: 0.875rem;
|
|
919
|
+
}
|
|
920
|
+
@media (pointer: coarse) {
|
|
921
|
+
.know-more-send {
|
|
922
|
+
height: 44px;
|
|
923
|
+
}
|
|
924
|
+
}
|
|
925
|
+
.know-more-send:disabled {
|
|
926
|
+
opacity: 1;
|
|
927
|
+
background: var(--muted);
|
|
928
|
+
color: var(--muted-foreground);
|
|
929
|
+
}
|
|
930
|
+
.know-more-mirror {
|
|
931
|
+
position: absolute;
|
|
932
|
+
visibility: hidden;
|
|
933
|
+
height: 0;
|
|
934
|
+
overflow: hidden;
|
|
935
|
+
top: 0;
|
|
936
|
+
left: 0;
|
|
937
|
+
padding: 9px 14px;
|
|
938
|
+
font: inherit;
|
|
939
|
+
font-size: 0.9375rem;
|
|
940
|
+
line-height: 20px;
|
|
941
|
+
border: 1px solid transparent;
|
|
942
|
+
resize: none;
|
|
943
|
+
}
|
|
944
|
+
@media (max-width: 639px) {
|
|
945
|
+
.know-more-mirror {
|
|
946
|
+
font-size: 1rem;
|
|
947
|
+
}
|
|
948
|
+
}
|
|
949
|
+
.know-more-hint {
|
|
950
|
+
font-size: 0.75rem;
|
|
951
|
+
color: var(--muted-foreground);
|
|
952
|
+
max-height: 0;
|
|
953
|
+
opacity: 0;
|
|
954
|
+
overflow: hidden;
|
|
955
|
+
transition:
|
|
956
|
+
max-height 0.2s ease,
|
|
957
|
+
opacity 0.2s ease,
|
|
958
|
+
margin 0.2s ease;
|
|
959
|
+
}
|
|
960
|
+
.know-more-hint.is-on {
|
|
961
|
+
/* Room for two lines: on a narrow card the hint wraps. */
|
|
962
|
+
max-height: 3rem;
|
|
963
|
+
opacity: 1;
|
|
964
|
+
margin-top: 0.375rem;
|
|
965
|
+
}
|
|
966
|
+
.know-more-attaching {
|
|
967
|
+
margin-top: 0.375rem;
|
|
968
|
+
font-size: 0.75rem;
|
|
969
|
+
color: var(--muted-foreground);
|
|
970
|
+
}
|
|
971
|
+
.know-more-attaching:empty {
|
|
972
|
+
display: none;
|
|
973
|
+
}
|
|
974
|
+
.know-more-clip[aria-busy] {
|
|
975
|
+
cursor: progress;
|
|
976
|
+
}
|
|
977
|
+
.know-more-error {
|
|
978
|
+
margin-top: 0.5rem;
|
|
979
|
+
font-size: 0.8125rem;
|
|
980
|
+
color: var(--destructive);
|
|
981
|
+
}
|
|
982
|
+
.know-more-sent {
|
|
983
|
+
font-size: 0.8125rem;
|
|
984
|
+
color: oklch(0.52 0.14 150);
|
|
985
|
+
max-height: 0;
|
|
986
|
+
opacity: 0;
|
|
987
|
+
overflow: hidden;
|
|
988
|
+
transition:
|
|
989
|
+
max-height 0.25s ease,
|
|
990
|
+
opacity 0.25s ease;
|
|
991
|
+
}
|
|
992
|
+
.know-more-sent.is-on {
|
|
993
|
+
max-height: 1.5rem;
|
|
994
|
+
opacity: 1;
|
|
995
|
+
margin-top: 0.5rem;
|
|
996
|
+
}
|
|
997
|
+
@media (prefers-reduced-motion: reduce) {
|
|
998
|
+
.know-more-field textarea:not(.know-more-mirror),
|
|
999
|
+
.know-more-clip,
|
|
1000
|
+
.know-more-hint,
|
|
1001
|
+
.know-more-sent,
|
|
1002
|
+
.detail-share {
|
|
1003
|
+
transition: none;
|
|
1004
|
+
}
|
|
1005
|
+
}
|