barua-ui 0.9.1 → 0.10.0

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.
@@ -39,6 +39,20 @@
39
39
  border-block-end: 1px solid var(--b-hairline);
40
40
  }
41
41
  .b-marketing-nav__brand { font-weight: var(--b-weight-semibold); font-size: var(--b-text-subheadline); }
42
+ /* The confident bar. A 2.75rem strip of caption type is right above an
43
+ application, where the chrome should get out of the way; on a front page
44
+ it reads as a browser toolbar somebody forgot to style. --lg gives it the
45
+ height, the type size and the room that say this is the top of a company,
46
+ and the action on the right is a filled pill rather than a link. */
47
+ .b-marketing-nav--lg {
48
+ height: 4rem;
49
+ gap: var(--b-space-6);
50
+ padding-inline: clamp(var(--b-space-4), 3vw, var(--b-space-10));
51
+ font-size: var(--b-text-subheadline);
52
+ }
53
+ .b-marketing-nav--lg .b-marketing-nav__brand { font-size: var(--b-text-title3); }
54
+ .b-marketing-nav--lg .b-marketing-nav__links { gap: clamp(var(--b-space-4), 2.4vw, var(--b-space-8)); }
55
+ .b-marketing-nav--lg a { font-weight: var(--b-weight-medium); }
42
56
  .b-marketing-nav__links { display: flex; gap: var(--b-space-5); margin-inline: auto; }
43
57
  .b-marketing-nav a { color: var(--b-text-secondary); text-decoration: none; }
44
58
  .b-marketing-nav a:hover { color: var(--b-text); }
@@ -109,7 +123,10 @@
109
123
  inset: 0;
110
124
  z-index: 0;
111
125
  pointer-events: none;
112
- --b-tile: 5.5rem;
126
+ /* The cell scales with the viewport. Held at a fixed size it kept its
127
+ pixel grain while the hero got narrow, so on a phone the whisper of a
128
+ pattern became grey blocks sitting behind the headline. */
129
+ --b-tile: clamp(2.25rem, 5.5vw, 5.5rem);
113
130
  /* The field paints its own ground, a shade off the page, and the squares
114
131
  sit *lighter* on it — which is the only way the pattern is visible on a
115
132
  white page and still barely there on a dark one. Two knobs, both
@@ -130,6 +147,14 @@
130
147
  -webkit-mask-image: radial-gradient(120% 85% at 50% 0%, #000 0%, transparent 72%);
131
148
  mask-image: radial-gradient(120% 85% at 50% 0%, #000 0%, transparent 72%);
132
149
  }
150
+ /* A hero on a phone is a different shape: tall and narrow, with the words
151
+ starting much higher up. The field has to be done before they get there. */
152
+ @media (max-width: 40rem) {
153
+ .b-tile-field {
154
+ -webkit-mask-image: radial-gradient(150% 52% at 50% 0%, #000 0%, transparent 70%);
155
+ mask-image: radial-gradient(150% 52% at 50% 0%, #000 0%, transparent 70%);
156
+ }
157
+ }
133
158
  /* Anything that has to sit on top of it says so once. */
134
159
  .b-tile-field ~ * { position: relative; z-index: 1; }
135
160
 
@@ -366,18 +391,187 @@
366
391
  .b-feature-row { grid-template-columns: 1fr 1fr; }
367
392
  .b-feature-row--flip > :first-child { order: 2; }
368
393
  }
394
+ /* Centred is right when the row is a picture beside prose, and wrong when it
395
+ is a headline beside a list of ten things: the headline drifts to the
396
+ middle of a tall column and stops looking like the title of what is next
397
+ to it. --top puts both columns on the same line. */
398
+ .b-feature-row--top { align-items: start; }
369
399
  .b-feature-row__title {
370
400
  font-size: clamp(1.5rem, 3vw, 2.25rem);
371
401
  font-weight: var(--b-weight-semibold);
372
402
  line-height: var(--b-leading-tight);
373
403
  letter-spacing: var(--b-tracking-tight);
374
404
  }
405
+ /* A feature row's headline at section scale. The base size is a subhead for
406
+ a row of three; when the row IS the chapter, it carries the chapter's
407
+ weight. */
408
+ .b-feature-row__title--lg {
409
+ font-size: clamp(2.25rem, 4.6vw, 3.5rem);
410
+ font-weight: var(--b-weight-bold);
411
+ line-height: 1.06;
412
+ }
375
413
  .b-feature-row__body {
376
414
  margin-block-start: var(--b-space-3);
377
415
  color: var(--b-text-secondary);
378
416
  line-height: var(--b-leading-body);
379
417
  }
380
418
 
419
+ /* ---- The marketing page's louder half ------------------------------------
420
+ Everything above this line is the quiet version of a product page. What
421
+ follows is the confident one: type that is large enough to be read across
422
+ a room, a ground that changes between chapters so the page has floors, and
423
+ an accent used at full strength instead of apologetically. A landing page
424
+ is not an application, and the restraint that makes a toolbar good makes a
425
+ front page forgettable. */
426
+
427
+ /* Highlight marker.
428
+ The one word in a headline that carries the sentence, on a block of
429
+ accent. It sits behind the letters rather than around them: a box-shadow
430
+ spread gives the marker its bleed without the inline padding that would
431
+ break the line's rhythm, and box-decoration-break keeps it whole when the
432
+ phrase wraps to a second line. */
433
+ .b-mark {
434
+ color: var(--b-text);
435
+ /* --b-color-accent-soft is a component's fill and reads as almost nothing
436
+ at headline size; a marker has to be visible from across the room. */
437
+ --b-mark-ground: color-mix(in srgb, var(--b-color-accent) 24%, var(--b-bg));
438
+ background: var(--b-mark-ground);
439
+ box-shadow: 0.24em 0 0 var(--b-mark-ground), -0.24em 0 0 var(--b-mark-ground);
440
+ -webkit-box-decoration-break: clone;
441
+ box-decoration-break: clone;
442
+ border-radius: 0.08em;
443
+ }
444
+
445
+ /* A chapter on a tinted ground.
446
+ Alternating white and a wash of the accent is what gives a long page
447
+ floors you can feel without a single rule or border. The wash is mixed
448
+ from the accent so it follows a brand colour, and it is deliberately
449
+ weaker than --b-color-accent-soft, which is a component's fill, not a
450
+ room's paint. */
451
+ .b-chapter--tint { background: color-mix(in srgb, var(--b-color-accent) 7%, var(--b-bg)); }
452
+
453
+ /* Showcase: the product on a panel, not on the page.
454
+ A screenshot dropped on white reads as a document. Inside a large rounded
455
+ panel of colour it reads as a product, because the panel gives it an edge
456
+ and a shadow to sit against, and the page gets one block of brand at the
457
+ point a visitor is deciding whether to keep reading. */
458
+ .b-showcase {
459
+ position: relative;
460
+ display: grid;
461
+ gap: var(--b-space-6);
462
+ padding: clamp(var(--b-space-6), 4vw, var(--b-space-10));
463
+ background: linear-gradient(135deg,
464
+ var(--b-color-accent),
465
+ color-mix(in srgb, var(--b-color-accent) 78%, var(--b-color-indigo, #4f46e5)));
466
+ border-radius: clamp(var(--b-radius-lg), 2.5vw, 2rem);
467
+ overflow: hidden;
468
+ }
469
+ /* The faint diamonds that stop a large flat panel from looking like a
470
+ rectangle of paint. Two rotated gradients, nothing to load. */
471
+ .b-showcase::before {
472
+ content: "";
473
+ position: absolute;
474
+ inset: -20%;
475
+ background:
476
+ linear-gradient(135deg, transparent 38%, rgba(255, 255, 255, 0.07) 38% 62%, transparent 62%),
477
+ linear-gradient(45deg, transparent 40%, rgba(255, 255, 255, 0.05) 40% 60%, transparent 60%);
478
+ background-size: 46% 46%, 62% 62%;
479
+ pointer-events: none;
480
+ }
481
+ .b-showcase > * { position: relative; }
482
+ .b-showcase__shot {
483
+ border-radius: var(--b-radius-lg);
484
+ box-shadow: var(--b-shadow-lg);
485
+ overflow: hidden;
486
+ }
487
+ .b-showcase__shot img { display: block; width: 100%; }
488
+ @media (min-width: 900px) {
489
+ /* Wide, the panel becomes a stage: the product takes the room and the card
490
+ overlaps its right edge, which is the whole reason the panel is bigger
491
+ than the picture it holds. */
492
+ .b-showcase { grid-template-columns: minmax(0, 1.55fr) minmax(16rem, 0.85fr); align-items: center; }
493
+ }
494
+
495
+ /* The card that floats on the showcase: three numbers and what they mean. */
496
+ .b-stat-card {
497
+ padding: clamp(var(--b-space-5), 2.5vw, var(--b-space-8));
498
+ background: var(--b-surface);
499
+ border-radius: var(--b-radius-lg);
500
+ box-shadow: var(--b-shadow-lg);
501
+ }
502
+ .b-stat-card__title {
503
+ font-size: clamp(1.6rem, 2.6vw, 2.25rem);
504
+ font-weight: var(--b-weight-bold);
505
+ line-height: 1.1;
506
+ letter-spacing: var(--b-tracking-tight);
507
+ }
508
+ .b-stat-card__rows { display: flex; flex-direction: column; margin-block-start: var(--b-space-5); }
509
+ .b-stat-card__row {
510
+ display: flex;
511
+ align-items: flex-start;
512
+ gap: var(--b-space-4);
513
+ padding-block: var(--b-space-4);
514
+ }
515
+ .b-stat-card__row + .b-stat-card__row { border-block-start: 1px solid var(--b-separator); }
516
+ .b-stat-card__figure {
517
+ display: block;
518
+ font-size: var(--b-text-title2);
519
+ font-weight: var(--b-weight-bold);
520
+ letter-spacing: var(--b-tracking-tight);
521
+ line-height: 1.1;
522
+ }
523
+ .b-stat-card__label { display: block; font-size: var(--b-text-footnote); color: var(--b-text-secondary); }
524
+
525
+ /* Logos on cards.
526
+ A bare row of wordmarks reads as text. On individual white plates they
527
+ read as the companies they stand for, which is the whole point of showing
528
+ them. Same wall, one modifier. */
529
+ .b-logo-wall--cards { gap: var(--b-space-4); }
530
+ .b-logo-wall--cards .b-logo-wall__logo {
531
+ height: auto;
532
+ padding: var(--b-space-4) var(--b-space-6);
533
+ font-size: var(--b-text-callout);
534
+ color: var(--b-text);
535
+ background: var(--b-surface);
536
+ border-radius: var(--b-radius-md);
537
+ box-shadow: var(--b-shadow-sm);
538
+ opacity: 1;
539
+ }
540
+
541
+ /* An accordion with no box around it.
542
+ The card version belongs in an application, where a group needs an edge to
543
+ separate it from the rest of the screen. On a marketing page the questions
544
+ are the only thing in their column, so the chrome is noise: hairlines
545
+ between rows, a circled mark on the right, and the open row lifted onto a
546
+ quiet fill so you can see where you are. */
547
+ .b-accordion--plain { background: none; border: 0; border-radius: 0; overflow: visible; }
548
+ .b-accordion--plain > .b-disclosure { border-block-end: 1px solid var(--b-separator); }
549
+ .b-accordion--plain > .b-disclosure + .b-disclosure { border-top: 0; }
550
+ .b-accordion--plain > .b-disclosure > summary {
551
+ padding-inline: 0;
552
+ padding-block: var(--b-space-5);
553
+ font-size: var(--b-text-callout);
554
+ font-weight: var(--b-weight-semibold);
555
+ align-items: flex-start;
556
+ }
557
+ .b-accordion--plain > .b-disclosure > summary:hover { background: none; color: var(--b-color-accent-text); }
558
+ .b-accordion--plain > .b-disclosure > summary::after {
559
+ content: "+";
560
+ display: grid;
561
+ place-items: center;
562
+ flex: none;
563
+ width: 1.75rem;
564
+ height: 1.75rem;
565
+ font-size: var(--b-text-callout);
566
+ font-weight: var(--b-weight-medium);
567
+ color: var(--b-color-accent-text);
568
+ border: 1px solid color-mix(in srgb, var(--b-color-accent) 40%, transparent);
569
+ border-radius: var(--b-radius-full);
570
+ rotate: none;
571
+ }
572
+ .b-accordion--plain > .b-disclosure[open] > summary::after { content: "\2212"; }
573
+ .b-accordion--plain > .b-disclosure > :not(summary) { padding-inline: 0; padding-block-end: var(--b-space-5); }
574
+
381
575
  /* ---- Bento: tiles of unequal weight, one grid ---------------------------- */
382
576
  .b-bento {
383
577
  display: grid;
@@ -397,7 +397,10 @@
397
397
  content: "";
398
398
  position: absolute;
399
399
  inset: 0;
400
- background: var(--b-img-placeholder) center / cover no-repeat;
400
+ /* The knob is set per instance; without a fallback an unset --b-img-placeholder
401
+ makes the whole shorthand invalid and the layer disappears rather than
402
+ degrading to a plain tint. */
403
+ background: var(--b-img-placeholder, linear-gradient(var(--b-fill-tertiary), var(--b-fill-tertiary))) center / cover no-repeat;
401
404
  /* Scaled up because a blur samples past the edges and would otherwise
402
405
  leave a soft border all the way round. */
403
406
  filter: blur(14px);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "barua-ui",
3
- "version": "0.9.1",
3
+ "version": "0.10.0",
4
4
  "description": "Barua UI — Apple-DNA design system (glass materials, Barua blue) as React components over pure CSS.",
5
5
  "license": "MIT",
6
6
  "type": "module",