npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@rimltempest/riml-ds-css

v0.3.1

Published

riml-ds の基盤 CSS。@layer の順序、リセット、ベース、ユーティリティ、印刷、強制配色

Readme

@rimltempest/riml-ds-css

riml-ds の基盤 CSS。@layer の順序宣言・リセット・ベース・ユーティリティ・印刷・強制配色。 プレーン CSS で、前処理は無い(配るのは書いたままの .css)。規約は ADR-0004 と .claude/skills/riml-ds-css/SKILL.md にある (ここでは繰り返さない)。

入れる

bun add @rimltempest/riml-ds-css @rimltempest/riml-ds-tokens

読み込み順(skills/riml-ds/SKILL.md §1 と同じ):

@import '@rimltempest/riml-ds-css/layers.css'; /* @layer の順序宣言。必ず最初 */
@import '@rimltempest/riml-ds-tokens/tokens.css'; /* --rd-*(light-dark 込み) */
@import '@rimltempest/riml-ds-css'; /* reset + base + utilities + print + forced-colors */
/* ブランドテーマがあれば */
@import '@rimltempest/riml-ds-tokens/themes/qrcc.css';

index.css に tokens.css は入っていない。 テーマの差し替えをトークン側で完結させるため、 変数の供給は @rimltempest/riml-ds-tokens の責務にしてある。index.css の先頭には layers.css が入っているので、1 行目の layers.css を省いて index.css だけにしてもよい (トークンより先に読む場合に限る)。

個別に読むなら layers.css → tokens.css → reset.css → base.css → typography.css → atoms.css → navigation.css → patterns.css → print.css → forced-colors.css の順。バンドラを持つ利用側はこちらでよい(index.css を 結合で作っているのは HTTP リクエスト数のため)。

@rimltempest/riml-ds-tokens は peerDependenciesMeta で optional にしてある。npm に出ていない tokens を file: / workspace: で取り込む利用側が 404 で止まらないようにするためで、 変数の供給が要らなくなるわけではない(読み込まないと色も寸法も出ない)。

ファイル

| ファイル | レイヤー | 中身 | | ------------------- | --------------- | -------------------------------------------------------------------------------------------- | | layers.css | (宣言のみ) | @layer rd.reset, rd.tokens, rd.base, rd.components, rd.utilities, rd.overrides; | | reset.css | rd.reset | box-sizing、margin: 0、メディア要素、フォームの font: inherit | | base.css | rd.base | body・見出し・行長・hr(点線)・リンク・:focus-visible・等幅 | | typography.css | rd.components | 文字のクラス(.rd-display … .rd-prose) | | atoms.css | rd.components | JS が要らない小さなパターン(.rd-badge … .rd-scroll-area) | | navigation.css | rd.components | 移動のための形(.rd-breadcrumb … .rd-sidebar) | | patterns.css | rd.components | 窓(.rd-window / .rd-window-title / .rd-window-body) | | utilities.css | rd.utilities | .rd-visually-hidden、.rd-skip-link、.rd-stack、.rd-cluster、.rd-aspect、[hidden] | | print.css | rd.base | @media print(リンク先の URL、ナビを消す、システム色) | | forced-colors.css | rd.base | @media (forced-colors: active)(リンク・フォーカス・ボタンの境界) |

ダークと高コントラストと密度はここに書かない(トークンが light-dark() と prefers-contrast / [data-density] で持つ)。

文字(typography.css)

見た目のクラスで、見出しレベルとは独立。構造は要素(h1..h6)が、大きさはクラスが決める。 素の h1..h6 は base.css が持ち、ここでは触らない。判断は system/guidelines/typography.md。

| クラス | 使うところ | | --------------------------------- | ---------------------------------------------------------------------- | | .rd-display | ヒーローと数字 1 つの窓。1 画面に 1 つ | | .rd-heading-1 … .rd-heading-4 | 見出しの大きさ(<h2 class="rd-heading-3"> のように選ぶ) | | .rd-body / .rd-small | 本文と補助テキスト | | .rd-caption | 補助文。letter.spacing.wide の広い字間と text.muted | | .rd-label | 太字の小さいラベル | | .rd-mono / .rd-numeric | 等幅・桁揃え(tabular-nums) | | .rd-truncate / .rd-clamp | 1 行省略・行数省略(行数は --rd-clamp-lines、既定 3) | | .rd-prose | 流し込み本文の入れ物。中の要素は :where() なので利用側のクラスが勝つ |

<article class="rd-prose">
  <h1 class="rd-display">まど</h1>
  <p class="rd-caption">2026-09-08</p>
  <p>本文。<code>--rd-*</code> だけで組んである。</p>
</article>

小さなパターン(atoms.css)

JS が要らないもの(バッジ・アバター・区切り・表・注意書き…)は部品にせず CSS のクラスで出す (ADR-0012 §6)。想定マークアップは src/atoms.css の各クラスの直前のコメントが持つ(読み上げに要る aria-label / aria-hidden / role / scope もそこに書いてある)。色だけで意味を伝えるクラスは 1 つも無い。

| クラス | 使うところ | | -------------------------------------------------- | ------------------------------------------------------------------------------------- | | .rd-badge | 数や状態のピル。data-tone="accent \| success \| warning \| danger \| info" | | .rd-dot / .rd-has-dot | 通知の点。件数と意味は文字で別に出す | | .rd-avatar / .rd-avatar-group | 丸いアバターと重ね並べ。大きさは --rd-avatar-size | | .rd-separator | 点線の区切り。aria-orientation="vertical" で縦線 | | .rd-skeleton | 読み込み中の骨組み。幅は --rd-skeleton-width、data-shape="circle \| block" | | .rd-kbd | キーキャップ | | .rd-tile | インクの角丸タイル。大きさは --rd-tile-size、data-tone="accent" | | .rd-icon-button | アイコンだけのボタン(44px の当たり判定)。aria-label 必須 | | .rd-toolbar | 押せるものを並べる帯。data-position="top" で罫線が上下入れ替わる | | .rd-list / .rd-list-row / .rd-list-meta | 一覧。選択は aria-current / aria-selected が持つ | | .rd-table / .rd-table-scroll | 表と横スクロールの入れ物。data-numeric で桁揃え、data-sticky で見出し固定 | | .rd-alert / .rd-alert-title / .rd-alert-icon | 注意書き。data-tone で左の帯の色。role は利用側が付ける | | .rd-legend / .rd-legend-item | 区分メーターの凡例。data-series="1".."4" の色は rd-meter と同じ順 | | .rd-card ほか 4 つ | 面のカード(-media / -body / -title / -footer)。.rd-card-link で全面リンク | | .rd-empty ほか 3 つ | 空の知らせ(-icon / -title / -actions)。次の行動を必ず置く | | .rd-spinner | 罫線で描く待ちの輪。大きさは --rd-spinner-size。文言は利用側が書く | | .rd-accordion | rd-disclosure を積む入れ物。排他は <details name> が持つ | | .rd-carousel ほか 2 つ | scroll snap の横帯(-track / -item)。1 枚の幅は --rd-carousel-item | | .rd-scroll-area | 転がる入れ物。高さは --rd-scroll-area-max、data-axis="x" で横だけ |

<div class="rd-alert" data-tone="warning" role="status">
  <span class="rd-alert-icon" aria-hidden="true"></span>
  <div>
    <p class="rd-alert-title">保存できません</p>
    <p>接続を確かめてください。</p>
  </div>
</div>

つまみ(--rd-avatar-size / --rd-tile-size / --rd-skeleton-width / --rd-legend-swatch / --rd-clamp-lines / --rd-spinner-size / --rd-carousel-item / --rd-scroll-area-max)は トークンではない。tokens.css に定義は無く、利用側が style="--rd-skeleton-width: 12ch" のように渡す。

prefers-reduced-motion: no-preference の中でだけ .rd-skeleton が明滅し、.rd-spinner が 回り、.rd-carousel / .rd-scroll-area が滑らかに転がり、.rd-icon-button が押し込まれる。 forced-colors: active では面に輪郭が付き、選択行が Highlight になり、細いスクロールバーの 色指定(scrollbar-color)は auto に戻る。

窓(.rd-window)

視覚言語「まど」の骨格(docs/brand.md §7.1)。帯・丸・硬い影は CSS だけで描く。 JS が要らないので部品にしない(ADR-0012 §6)。

<section class="rd-window" aria-labelledby="w1">
  <header class="rd-window-bar" data-tone="warning">
    <div class="rd-window-controls">
      <button
        type="button"
        class="rd-window-control"
        data-action="close"
        aria-label="閉じる"
      ></button>
    </div>
    <h2 class="rd-window-title" id="w1">設定</h2>
  </header>
  <div class="rd-window-body">…</div>
</section>

帯は header、その中に見出し要素そのものを置く(文書構造と見た目が一致する。 ADR-0014 決定 2)。左端の丸は装飾ではなく 本物の <button>(決定 1)。data-action="close" | "collapse" | "expand" で丸の色と印が変わり(閉じる = ほっぺの桃、 広げる = 髪の青、たたむ = 紙。ADR-0015)、 aria-label が必須。押したときの動作は利用側が書く(動作まで要るなら rd-window 要素)。 操作が 1 つも無いなら .rd-window-controls ごと省く——押せない丸は置かない。 丸の並びは .rd-window-bar に置いた 3 つの変数で調整できる: --rd-window-control-gap(間隔。既定 0)、 --rd-window-control-size(丸の直径。既定 1.25rem)、--rd-window-glyph-size(記号。既定 0.75rem)。 既定の 0 でも当たり判定が 2.75rem 四方なので丸の隙間は 1.5rem ある。負の間隔は使わない(押せる四角が重なる)。帯の色は data-tone="accent" | "warning" | "danger" で変わり、文字色は対応する on-* が付く。 forced-colors: active では帯が Canvas / CanvasText の 1px 罫線に置き換わり、丸は ButtonFace / ButtonText の輪郭で残る(操作だから消さない)。

主要ナビの帯(.rd-nav-menu)

ページの主要ナビ。横一列のリンクで、落ちるメニューが要る項目には rd-menu を入れる。 開閉は rd-menu が持つので、この帯は JS を持たない (ADR-0012 §6)。

<nav class="rd-nav-menu" aria-label="主要">
  <ul>
    <li><a href="/" aria-current="page">ホーム</a></li>
    <li>
      <rd-menu label="作る">
        <rd-button slot="trigger" variant="ghost">
          <button type="button" popovertarget="nav-make">作る</button>
        </rd-button>
        <div popover id="nav-make"><a href="/new">新しい書類</a></div>
      </rd-menu>
    </li>
  </ul>
</nav>

.rd-menubar は窓の帯(色が chrome)、.rd-nav-menu はページの主要ナビ(面が surface) ——用途で色が分かれる。現在地は aria-current="page" を太字 + 下の縦罫で示す(色だけに頼らない)。 48rem 未満では折り返さず横に流れる(帯が何行にも割れて中身を押し下げない)。 forced-colors: active では縦罫が消えるので現在地に下線が付く。 中の rd-menu は placement="start" のままで帯の左端に揃う——右端の項目は利用側が placement="end" を付ける。

ユーティリティ

<a class="rd-skip-link" href="#main">本文へ</a>
<h1>見出し <span class="rd-visually-hidden">(詳細)</span></h1>

.rd-skip-link は <body> 直下に置く。フォーカスされるまでは隠れる。スキップリンクを部品に しないのは、JS 無しで動くのが <a href="#main"> そのものだから(ADR-0012 §6)。

.rd-aspect は比を固定した入れ物で、中の img / video / iframe を切り抜いて埋める。 比は --rd-aspect(既定 16 / 9)。data-ratio="1" と data-ratio="4-3" だけ用意してあり、 それ以外は style="--rd-aspect: 21 / 9" のように渡す。

<div class="rd-aspect" data-ratio="1"><img src="cover.avif" alt="" /></div>

ユーティリティはこの 6 つで打ち止め。ユーティリティ CSS フレームワークにしない。

上書き

rd.overrides は空にしてある。利用側はここに書くか、layers.css の後に自分のレイヤーを 宣言する(後に宣言したレイヤーが必ず勝つ。詳細度で殴らない)。

@layer rd.overrides {
  .rd-skip-link {
    background: var(--rd-color-surface-raised);
  }
}
@layer app {
  /* rd.overrides より後に宣言されるので必ず勝つ */
}

直す

src/*.css が正。dist/ は bun run build(scripts/build.ts)が作る生成物なので編集しない。 bun run lint:css が生値・物理プロパティ・裸のモーション・Baseline Newly の裸使いを落とす。