/* RI Membership — the six build-spec pages.
   Kategori, Kelas Self Learning, materi reader, Program Bulanan (both pages),
   Akun Saya.

   Loaded on top of dashboard.css and reusing its tokens: these pages are meant
   to read as one product with the dashboard, so nothing here introduces a new
   colour, a second radius scale, or a third font. Anything that looked like it
   needed a new value was a sign the dashboard token was the wrong one. */

.ri-kategori, .ri-kelas, .ri-pb, .ri-pb-detail, .ri-akun {
	max-width: 1100px; margin: 0 auto; font-family: var(--ri-sans); color: var(--ri-body);
}

/* ----------------------------------------------------------------- crumbs -- */
.ri-crumb { font-size: 12.5px; color: var(--ri-muted); margin: 0 0 10px; display: flex; gap: 7px; flex-wrap: wrap; }
.ri-crumb a { color: var(--ri-accent); text-decoration: none; }
.ri-crumb a:hover { text-decoration: underline; }
.ri-back { display: inline-block; font-size: 13px; color: var(--ri-accent); text-decoration: none; margin-bottom: 10px; }

.ri-kategori-title, .ri-akun-title { font-family: var(--ri-serif); font-weight: 700; color: var(--ri-ink); margin: 0 0 6px; }
.ri-kategori-desc { margin: 0 0 18px; font-size: 14px; }

/* ------------------------------------------------------------ upgrade bar -- */
.ri-upsell {
	background: var(--ri-terra-pale); border: 1px solid var(--ri-terra-line); border-radius: var(--ri-radius);
	padding: 14px 16px; margin: 0 0 18px;
	display: flex; align-items: center; justify-content: space-between; gap: 14px; flex-wrap: wrap;
}
.ri-upsell p { margin: 0; color: var(--ri-terra); font-weight: 600; font-size: 14px; }
.ri-upsell-btn {
	background: var(--ri-terra); color: #fffdf8; text-decoration: none; padding: 9px 16px;
	border-radius: 10px; font-size: 13px; font-weight: 700; white-space: nowrap;
}

/* ------------------------------------------------------- subkategori grid -- */
.ri-subgrid { display: grid; grid-template-columns: repeat(var(--ri-cols, 2), minmax(0, 1fr)); gap: 18px; }
.ri-subgrid.is-dim { opacity: .55; }
.ri-subcard {
	display: flex; flex-direction: column; background: var(--ri-bg); border: 1px solid var(--ri-line);
	border-radius: 14px; overflow: hidden; text-decoration: none; color: inherit; transition: box-shadow .15s;
}
.ri-subcard:hover { box-shadow: 0 6px 18px var(--ri-shadow); }
.ri-subcard-img { position: relative; aspect-ratio: 16 / 9; background: var(--ri-shade) center / cover no-repeat; display: block; }
.ri-subcard-body { padding: 16px; display: flex; flex-direction: column; gap: 5px; }
.ri-subcard-title { font-family: var(--ri-serif); font-weight: 700; font-size: 15px; color: var(--ri-ink); }
.ri-subcard-desc { font-size: 13px; color: var(--ri-body); }
.ri-subcard-meta {
	font-size: 12px; color: var(--ri-muted); border-top: 1px solid var(--ri-line);
	margin-top: 6px; padding-top: 9px; display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
}
.ri-dot { opacity: .6; }

/* --------------------------------------------------------- kelas two-col -- */
.ri-kelas-hero {
	background: radial-gradient(circle at 30% 20%, #3a7a5a, var(--ri-green-deep));
	border-radius: var(--ri-radius); padding: 36px; margin-bottom: 22px; color: #fffdf8;
}
.ri-eyebrow { font-size: 12px; letter-spacing: .09em; text-transform: uppercase; color: var(--ri-green-pale); }
.ri-kelas-hero h1 {
	font-family: var(--ri-serif); font-weight: 700; font-size: clamp(24px, 4vw, 32px);
	color: #fffdf8; margin: 6px 0 8px;
}
.ri-kelas-hero p { font-size: 14px; color: var(--ri-green-pale); max-width: 560px; margin: 0; }

.ri-kelas-cols { display: grid; grid-template-columns: 280px minmax(0, 1fr); gap: 22px; align-items: start; }
.ri-kelas-side { position: sticky; top: 22px; display: flex; flex-direction: column; gap: 14px; }
.ri-card-plain { background: var(--ri-bg); border: 1px solid var(--ri-line); border-radius: var(--ri-radius); padding: 18px; }
.ri-kelas-cover {
	display: block; aspect-ratio: 16 / 9; border-radius: 10px;
	background: var(--ri-shade) center / cover no-repeat; margin-bottom: 14px;
}
.ri-cta-gold {
	display: block; text-align: center; background: var(--ri-gold); color: var(--ri-gold-ink);
	text-decoration: none; font-weight: 800; font-size: 14px; padding: 12px; border-radius: 10px;
}
.ri-kelas-stats { list-style: none; margin: 14px 0 0; padding: 0; display: flex; gap: 16px; font-size: 13px; color: var(--ri-muted); }
.ri-kelas-progress strong { font-size: 15px; color: var(--ri-accent); }
.ri-bar { display: block; height: 6px; border-radius: 3px; background: var(--ri-shade); margin: 9px 0 8px; overflow: hidden; }
.ri-bar > span { display: block; height: 100%; background: var(--ri-accent); border-radius: 3px; }
.ri-kelas-seen { font-size: 12px; color: var(--ri-muted); }
.ri-kelas-h2 { font-family: var(--ri-serif); font-weight: 700; font-size: 19px; color: var(--ri-ink); margin: 0 0 14px; }
/* Month heading on a "berjalan" class, where the list is grouped by when the
   material landed rather than by module. Lighter than .ri-kelas-h2 on purpose:
   it is a divider inside the list, not a second page heading. */
.ri-kelas-bulan { font-family: var(--ri-sans); font-weight: 600; font-size: 13px; letter-spacing: .04em; text-transform: uppercase; color: var(--ri-muted); margin: 22px 0 10px; }
.ri-kelas-bulan:first-child { margin-top: 0; }

/* -------------------------------------------------------------- accordion -- */
.ri-moduls { display: flex; flex-direction: column; gap: 12px; }
.ri-modul { background: var(--ri-bg); border: 1px solid var(--ri-line); border-radius: 14px; overflow: hidden; }
.ri-modul-head {
	width: 100%; display: flex; align-items: center; gap: 10px; padding: 14px 16px;
	background: none; border: 0; cursor: pointer; text-align: left; font-family: inherit;
}
.ri-chev { color: var(--ri-muted); transition: transform .15s; flex: none; }
.ri-modul.is-open .ri-chev { transform: rotate(90deg); }
.ri-modul-title { font-family: var(--ri-serif); font-weight: 700; font-size: 15px; color: var(--ri-ink); flex: 1; }
.ri-modul-count { font-size: 12px; color: var(--ri-muted); }
.ri-modul-list { list-style: none; margin: 0; padding: 0; display: none; }
.ri-modul.is-open .ri-modul-list { display: block; }
.ri-modul-item a {
	display: flex; align-items: center; gap: 10px; padding: 11px 16px; text-decoration: none;
	color: var(--ri-body); font-size: 13px; border-top: 1px solid var(--ri-line);
}
.ri-modul-item a:hover { background: var(--ri-page); }
.ri-modul-item.is-active a { background: var(--ri-accent-soft); font-weight: 700; color: var(--ri-ink); }

/* ----------------------------------------------------------------- reader -- */
.ri-reader-nav { display: flex; flex-direction: column; gap: 10px; margin-bottom: 16px; }
.ri-reader-actions { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.ri-pager { margin-left: auto; display: flex; gap: 8px; }
.ri-pager-btn {
	width: 32px; height: 32px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center;
	border: 1px solid var(--ri-line); color: var(--ri-body); text-decoration: none; font-size: 16px; line-height: 1;
}
.ri-pager-btn.is-next { background: var(--ri-accent); border-color: var(--ri-accent); color: #fffdf8; }
.ri-pager-btn.is-off { opacity: .35; }

.ri-done-btn--pill {
	border: 1.5px solid var(--ri-accent); background: var(--ri-bg); color: var(--ri-accent);
	padding: 6px 14px; border-radius: 20px; font-size: 12.5px; font-weight: 700;
	cursor: pointer; font-family: inherit;
}
.ri-done-btn--block {
	display: block; width: 100%; background: var(--ri-accent); color: #fffdf8; border: 0; border-radius: 12px;
	padding: 14px; font-size: 14px; font-weight: 700; cursor: pointer; font-family: inherit;
	box-shadow: 0 4px 12px rgba(46, 107, 79, .25);
}
.ri-done-btn--pill.is-done, .ri-done-btn--block.is-done { opacity: .7; }

.ri-unduh { display: flex; gap: 10px; flex-wrap: wrap; margin: 14px 0; }
.ri-btn-solid, .ri-btn-outline {
	display: inline-block; text-decoration: none; font-size: 13px; font-weight: 700;
	padding: 10px 16px; border-radius: 10px; cursor: pointer; border: 1.5px solid var(--ri-accent);
}
.ri-btn-solid { background: var(--ri-accent); color: #fffdf8; }
.ri-btn-outline { background: transparent; color: var(--ri-accent); }

/* -------------------------------------------------------- program bulanan -- */
.ri-badge { display: inline-block; font-size: 11.5px; font-weight: 800; padding: 4px 10px; border-radius: 20px; }
.ri-badge.is-live { background: var(--ri-accent-soft); color: var(--ri-accent); }
.ri-badge.is-soon { background: var(--ri-shade); color: var(--ri-muted); }

.ri-pb-now {
	display: grid; grid-template-columns: minmax(0, 320px) minmax(0, 1fr);
	background: var(--ri-bg); border: 1px solid var(--ri-line); border-radius: var(--ri-radius);
	overflow: hidden; margin-bottom: 20px;
}
.ri-pb-now-img { background: var(--ri-shade) center / cover no-repeat; min-height: 190px; }
.ri-pb-now-body { padding: 22px; display: flex; flex-direction: column; align-items: flex-start; gap: 10px; }
.ri-pb-now-body h2 { font-family: var(--ri-serif); font-weight: 700; font-size: 21px; color: var(--ri-ink); margin: 0; }
.ri-pb-now-body p { margin: 0; font-size: 14px; }

/* Dashed and dimmed, with no link at all: the spec is clear that next month's
   material does not exist yet, so a door onto nothing is worse than no door. */
.ri-pb-next { border: 1.5px dashed var(--ri-line); border-radius: var(--ri-radius); padding: 18px; opacity: .7; margin-bottom: 20px; }
.ri-pb-next h3 { font-family: var(--ri-serif); font-weight: 700; font-size: 17px; color: var(--ri-ink); margin: 8px 0 6px; }
.ri-pb-next p { margin: 0; font-size: 13.5px; }
.ri-pb-h3, .ri-akun-h3 { font-family: var(--ri-serif); font-weight: 700; font-size: 17px; color: var(--ri-ink); margin: 24px 0 12px; }
.ri-pb-period { font-size: 13px; color: var(--ri-green-pale); }
.ri-pb-side-period { font-size: 13px; color: var(--ri-muted); margin: 10px 0 0; }

.ri-wa {
	display: flex; align-items: center; justify-content: center; gap: 8px; background: var(--ri-gold);
	color: var(--ri-gold-ink); text-decoration: none; font-weight: 800; font-size: 13.5px;
	padding: 12px; border-radius: 10px;
}
.ri-wa.is-off { background: var(--ri-line); color: var(--ri-muted); cursor: not-allowed; }

.ri-pb-mini { font-size: 13px; }
.ri-mini-label { display: block; font-size: 11.5px; text-transform: uppercase; letter-spacing: .07em; color: var(--ri-muted); margin-bottom: 6px; }
.ri-pb-mini strong { font-family: var(--ri-serif); color: var(--ri-ink); }
.ri-mini-sub { display: block; font-size: 12px; color: var(--ri-muted); }
.ri-pb-mini ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.ri-pb-mini a { color: var(--ri-accent); text-decoration: none; }
.ri-mini-more { display: inline-block; margin-top: 10px; font-size: 12.5px; }

.ri-hari { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.ri-hari-row {
	display: flex; align-items: center; gap: 12px; padding: 14px 16px; background: var(--ri-bg);
	border: 1px solid var(--ri-line); border-radius: 12px; text-decoration: none; color: var(--ri-body);
}
a.ri-hari-row:hover { box-shadow: 0 4px 12px var(--ri-shadow); }
.ri-hari-title { flex: 1; font-size: 14px; color: var(--ri-ink); }
.ri-hari-item.is-locked .ri-hari-row { opacity: .6; background: var(--ri-page); }
.ri-hari-item.is-active .ri-hari-row { border-color: var(--ri-accent); background: var(--ri-accent-soft); }
.ri-hari-lock { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--ri-muted); }

/* -------------------------------------------------------------- akun saya -- */
.ri-akun-cols { display: grid; grid-template-columns: 220px minmax(0, 1fr); gap: 22px; align-items: start; }
.ri-akun-menu { display: flex; flex-direction: column; gap: 4px; position: sticky; top: 22px; }
.ri-akun-menu .ri-tab {
	text-align: left; padding: 10px 14px; border-radius: 10px; border: 0; background: none;
	color: var(--ri-body); font-size: 13.5px; cursor: pointer; font-family: inherit;
}
.ri-akun-menu .ri-tab.is-active { background: var(--ri-accent); color: #fffdf8; font-weight: 700; }
.ri-akun-sep { height: 1px; background: var(--ri-line); margin: 10px 0; }
.ri-akun-link { padding: 10px 14px; font-size: 13.5px; color: var(--ri-accent); text-decoration: none; }
.ri-akun-link.is-out { color: var(--ri-terra); }

.ri-akun-panels > section {
	background: var(--ri-bg); border: 1px solid var(--ri-line); border-radius: var(--ri-radius); padding: 22px;
}
.ri-form { display: flex; flex-direction: column; gap: 14px; max-width: 440px; }
.ri-form label { display: flex; flex-direction: column; gap: 6px; font-size: 13px; color: var(--ri-body); font-weight: 600; }
.ri-form input[type="text"], .ri-form input[type="email"], .ri-form input[type="password"] {
	border: 1px solid var(--ri-line); border-radius: 10px; padding: 11px 14px; font-size: 14px;
	font-family: inherit; color: var(--ri-ink); background: #fff;
}
.ri-form input.is-readonly { background: var(--ri-page); color: var(--ri-muted); }
.ri-form small { font-weight: 400; color: var(--ri-muted); font-size: 12px; }
.ri-form button { align-self: flex-start; border: 0; }
.ri-form-photo { display: flex; align-items: center; gap: 16px; }
.ri-avatar { border-radius: 50%; width: 88px; height: 88px; object-fit: cover; }
.ri-file { position: relative; overflow: hidden; }
.ri-file span {
	display: inline-block; border: 1.5px solid var(--ri-accent); color: var(--ri-accent);
	border-radius: 10px; padding: 8px 14px; font-size: 13px; font-weight: 700; cursor: pointer;
}
.ri-file input { position: absolute; inset: 0; opacity: 0; cursor: pointer; }

.ri-note { border-radius: 10px; padding: 11px 14px; font-size: 13.5px; margin-bottom: 16px; }
.ri-note.is-ok { background: var(--ri-accent-soft); color: var(--ri-accent); }
.ri-note.is-err { background: var(--ri-terra-pale); color: var(--ri-terra); }

.ri-rows { list-style: none; margin: 0; padding: 0; }
.ri-rows li {
	display: flex; align-items: center; justify-content: space-between; gap: 14px;
	padding: 12px 0; border-bottom: 1px solid var(--ri-line);
}
.ri-row-main { display: flex; flex-direction: column; gap: 3px; font-size: 13px; }
.ri-row-main small { color: var(--ri-muted); font-size: 12px; }
.ri-row-side { font-size: 13px; font-weight: 700; color: var(--ri-ink); white-space: nowrap; }
.ri-embed { border-radius: 14px; overflow: hidden; margin-bottom: 8px; }
.ri-embed iframe { width: 100%; aspect-ratio: 16 / 9; height: auto; display: block; border: 0; }

/* ------------------------------------------------------------------ narrow -- */
@media (max-width: 860px) {
	.ri-kelas-cols, .ri-akun-cols { grid-template-columns: minmax(0, 1fr); }
	.ri-kelas-side, .ri-akun-menu { position: static; }
	.ri-akun-menu { flex-direction: row; flex-wrap: wrap; }
	.ri-akun-sep { display: none; }
	.ri-pb-now, .ri-subgrid { grid-template-columns: minmax(0, 1fr); }
}

/* ══════════════════════════════════ coaching, printables, top tier ═════════
   The second wave of build specs. Same tokens again — the only new shape here
   is the poster cover, which needs its own aspect ratio because a printable is
   portrait where everything else on the site is 16:9. */

/* ------------------------------------------------------------- coaching -- */
.ri-coaching, .ri-cl, .ri-printable { max-width: 1100px; margin: 0 auto; font-family: var(--ri-sans); color: var(--ri-body); }

.ri-sesi-next {
	background: radial-gradient(circle at 30% 20%, #3a7a5a, var(--ri-green-deep));
	border-radius: var(--ri-radius); padding: 24px; margin: 18px 0 24px; color: #fffdf8;
	display: flex; flex-direction: column; align-items: flex-start; gap: 10px;
}
.ri-sesi-next h2 { font-family: var(--ri-serif); font-weight: 700; font-size: 20px; color: #fffdf8; margin: 0; }
.ri-sesi-next p { margin: 0; font-size: 13.5px; color: var(--ri-green-pale); }
.ri-sesi-next .ri-wa { align-self: flex-start; padding: 11px 18px; }

.ri-sesi { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.ri-sesi-row {
	display: flex; align-items: center; gap: 14px; padding: 14px 16px; background: var(--ri-bg);
	border: 1px solid var(--ri-line); border-radius: 14px; text-decoration: none; color: var(--ri-body);
}
a.ri-sesi-row:hover { box-shadow: 0 4px 12px var(--ri-shadow); }
.ri-sesi-no {
	flex: none; width: 40px; height: 40px; border-radius: 10px; background: var(--ri-page);
	display: inline-flex; align-items: center; justify-content: center;
	font-family: var(--ri-serif); font-weight: 700; font-size: 14px; color: var(--ri-accent);
}
.ri-sesi-body { flex: 1; display: flex; flex-direction: column; gap: 2px; }
.ri-sesi-title { font-size: 14px; color: var(--ri-ink); }
.ri-sesi-date { font-size: 12px; color: var(--ri-muted); }
.ri-sesi-item.is-locked .ri-sesi-row { opacity: .6; background: var(--ri-page); }
.ri-sesi-item.is-active .ri-sesi-row { border-color: var(--ri-accent); background: var(--ri-accent-soft); }

.ri-webinar-live {
	display: flex; align-items: center; gap: 12px; flex-wrap: wrap; background: var(--ri-accent-soft);
	border-radius: 12px; padding: 14px 16px; margin: 14px 0;
}
.ri-webinar-live strong { font-size: 14px; color: var(--ri-ink); flex: 1; }

/* ------------------------------------------------------- coaching lanjutan */
.ri-tier-eyebrow {
	display: inline-flex; align-items: center; gap: 7px; font-size: 12px; letter-spacing: .09em;
	text-transform: uppercase; color: var(--ri-accent); font-weight: 700; margin-bottom: 4px;
}
.ri-dot-gold { width: 7px; height: 7px; border-radius: 50%; background: var(--ri-gold); }
.ri-cl-hero {
	display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px;
	background: radial-gradient(circle at 25% 20%, #3a7a5a, var(--ri-green-deep));
	border-radius: var(--ri-radius); padding: 26px; margin: 18px 0 26px; color: #fffdf8;
}
.ri-cl-col { display: flex; flex-direction: column; gap: 10px; align-items: flex-start; }
.ri-cl-col p { margin: 0; font-size: 13.5px; color: var(--ri-green-pale); }
.ri-cl-col .ri-mini-label, .ri-cl-zoom .ri-mini-label { color: var(--ri-green-pale); }
.ri-cl-zoom { display: flex; flex-direction: column; gap: 10px; align-items: flex-start; }
.ri-cl-zoom strong { font-family: var(--ri-serif); font-size: 16px; color: #fffdf8; }
.ri-modul-item a small { color: var(--ri-muted); font-size: 11.5px; margin-left: auto; }

/* ------------------------------------------------------------ printables -- */
.ri-pills { display: flex; gap: 8px; flex-wrap: wrap; justify-content: center; margin: 18px 0 22px; }
.ri-pill {
	border: 1px solid var(--ri-line); background: var(--ri-bg); color: var(--ri-muted);
	padding: 8px 16px; border-radius: 20px; font-size: 13px; cursor: pointer;
	font-family: inherit; font-weight: 600;
}
.ri-pill.is-active { background: var(--ri-accent); border-color: var(--ri-accent); color: #fffdf8; }

.ri-covers { display: grid; grid-template-columns: repeat(var(--ri-cols, 4), minmax(0, 1fr)); gap: 20px; }
.ri-covers.is-small { gap: 12px; }
.ri-cover { text-decoration: none; color: inherit; display: flex; flex-direction: column; gap: 8px; }
.ri-cover[hidden] { display: none; }
.ri-cover-img {
	position: relative; display: block; aspect-ratio: var(--ri-ratio, 2/3); border-radius: 10px;
	background: var(--ri-shade) center / cover no-repeat; box-shadow: 0 4px 14px var(--ri-shadow);
}
.ri-cover-title { font-size: 13px; color: var(--ri-ink); line-height: 1.35; }
.ri-covers.is-small .ri-cover-title { font-size: 12px; }
.ri-cover-tick {
	position: absolute; top: 8px; left: 8px; width: 20px; height: 20px; border-radius: 50%;
	background: var(--ri-accent); color: #fffdf8; display: inline-flex; align-items: center; justify-content: center;
}

.ri-dl-btn {
	display: inline-block; background: var(--ri-accent); color: #fffdf8; text-decoration: none;
	font-size: 13.5px; font-weight: 700; padding: 12px 20px; border-radius: 10px;
	border: 1.5px solid var(--ri-accent);
}
.ri-dl-btn.is-got { background: transparent; color: var(--ri-accent); }

/* fresh-material preview inside a subkategori card */
.ri-fresh {
	display: flex; align-items: center; gap: 10px; margin-top: 10px; padding-top: 10px;
	border-top: 1px solid var(--ri-line);
}
.ri-fresh-img { width: 64px; height: 42px; border-radius: 6px; background: var(--ri-shade) center / cover no-repeat; flex: none; }
.ri-fresh-body { display: flex; flex-direction: column; font-size: 12.5px; color: var(--ri-ink); }
.ri-fresh-body small { color: var(--ri-accent); font-weight: 700; font-size: 11px; text-transform: uppercase; letter-spacing: .05em; }

/* monthly theme banner — terracotta, deliberately unlike the green/gold used
   everywhere else, because it is about season rather than status */
.ri-tema {
	display: flex; align-items: center; gap: 18px; background: var(--ri-terra); color: #fffdf8;
	border-radius: var(--ri-radius); padding: 16px 20px; margin-bottom: 22px; flex-wrap: wrap;
}
.ri-tema-img { width: 200px; aspect-ratio: 16 / 9; border-radius: 10px; background: var(--ri-terra-pale) center / cover no-repeat; flex: none; }
.ri-tema-body { flex: 1; min-width: 200px; }
.ri-tema-body h3 { font-family: var(--ri-serif); font-weight: 700; font-size: 18px; color: #fffdf8; margin: 4px 0; }
.ri-tema-body p { margin: 0; font-size: 13.5px; opacity: .9; }
.ri-tema .ri-mini-label { color: var(--ri-terra-pale); }
.ri-tema-cta {
	background: #fffdf8; color: var(--ri-terra); text-decoration: none; font-weight: 700;
	font-size: 13px; padding: 10px 18px; border-radius: 10px; white-space: nowrap;
}

/* "jelajahi kategori lain" */
.ri-lain { margin-top: 34px; }
.ri-lain-strip { display: flex; gap: 10px; flex-wrap: wrap; }
.ri-lain-chip {
	display: inline-flex; align-items: center; gap: 9px; background: var(--ri-bg);
	border: 1px solid var(--ri-line); border-radius: 20px; padding: 6px 14px 6px 6px;
	text-decoration: none; color: var(--ri-body); font-size: 12.5px;
}
.ri-lain-chip:hover { border-color: var(--ri-accent); }
.ri-lain-thumb { width: 26px; height: 26px; border-radius: 50%; background: var(--ri-shade) center / cover no-repeat; flex: none; }

@media (max-width: 860px) {
	.ri-cl-hero { grid-template-columns: minmax(0, 1fr); }
	.ri-covers { grid-template-columns: repeat(2, minmax(0, 1fr)); }
	.ri-covers.is-small { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

/* ═══════════════════════════ halaman detail materi printable ═══════════════
   Lapbook v2 §2 and Buku Berjenjang §2. The cover is the one place on the site
   with a portrait aspect — everything else is 16:9 — so it carries its own
   --ri-ratio rather than borrowing a card style that would crop it wrong. */

.ri-pd { display: grid; grid-template-columns: minmax(0, 320px) minmax(0, 1fr); gap: 28px; align-items: start; margin-bottom: 30px; }
.ri-pd-cover > span {
	display: block; aspect-ratio: var(--ri-ratio, 2/3); border-radius: 12px;
	background: var(--ri-shade) center / cover no-repeat; box-shadow: 0 8px 24px var(--ri-shadow);
}
.ri-pd-body { display: flex; flex-direction: column; gap: 12px; }
.ri-pd-desc { font-size: 14px; color: var(--ri-body); }
.ri-pd-desc p { margin: 0 0 10px; }

/* Baca Langsung — outline grey, so Versi Cetak stays the primary of the two. */
.ri-btn-ghost {
	display: inline-block; text-decoration: none; font-size: 13px; font-weight: 700;
	padding: 10px 16px; border-radius: 10px; border: 1.5px solid var(--ri-line); color: var(--ri-muted);
}
.ri-btn-ghost:hover { border-color: var(--ri-muted); color: var(--ri-body); }

/* tutorial ---------------------------------------------------------------- */
.ri-tutorial { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
.ri-tut-step { position: relative; display: block; }
.ri-tut-step > span {
	display: block; aspect-ratio: 4 / 3; border-radius: 10px;
	background: var(--ri-shade) center / cover no-repeat;
}
.ri-tut-step > small {
	position: absolute; top: 8px; left: 8px; width: 22px; height: 22px; border-radius: 50%;
	background: var(--ri-accent); color: #fffdf8; font-size: 11px; font-weight: 800;
	display: inline-flex; align-items: center; justify-content: center;
}
.ri-tut-cap { font-size: 13px; color: var(--ri-muted); margin: 12px 0 0; }

/* assembly templates ------------------------------------------------------ */
.ri-tpls { display: flex; gap: 8px; flex-wrap: wrap; margin: 16px 0; }
.ri-tpl {
	background: var(--ri-accent); color: #fffdf8; font-size: 12px; font-weight: 700;
	padding: 6px 14px; border-radius: 20px;
}

/* referensi + kompetensi -------------------------------------------------- */
.ri-boxes { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; margin-top: 26px; }
.ri-box { background: var(--ri-page); border: 1px solid var(--ri-line); border-radius: 14px; padding: 18px; }
.ri-box h4 { font-family: var(--ri-serif); font-weight: 700; font-size: 15px; color: var(--ri-ink); margin: 0 0 12px; }

/* buku berjenjang greeting ------------------------------------------------ */
.ri-jintro { font-size: 14px; color: var(--ri-body); margin-bottom: 18px; }
.ri-jhi { font-family: var(--ri-serif); font-weight: 700; font-size: 17px; color: var(--ri-ink); margin: 0 0 8px; }
.ri-jpoints { margin: 12px 0 0; padding-left: 20px; display: flex; flex-direction: column; gap: 6px; }
.ri-jpoints li { font-size: 13.5px; }

/* the detail-page pills are links, not buttons — same look, different element */
a.ri-pill { text-decoration: none; display: inline-block; }

@media (max-width: 860px) {
	.ri-pd { grid-template-columns: minmax(0, 1fr); }
	.ri-pd-cover { max-width: 260px; }
	.ri-boxes { grid-template-columns: minmax(0, 1fr); }
	.ri-tutorial { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* ------------------------------------------------------ halaman penjualan -- */
.ri-paket-grid { display: grid; grid-template-columns: repeat(var(--ri-paket-cols, 3), minmax(0, 1fr)); gap: 18px; }
.ri-paket-card { position: relative; display: flex; flex-direction: column; gap: 10px; background: var(--ri-bg); border: 1px solid var(--ri-line); border-radius: var(--ri-radius, 14px); padding: 22px 20px; }
.ri-paket-card.is-sorot { border-color: var(--ri-accent); box-shadow: 0 0 0 1px var(--ri-accent); }
.ri-paket-badge { position: absolute; top: -11px; left: 20px; background: var(--ri-accent); color: #fff; font-family: var(--ri-sans); font-size: 11px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; padding: 4px 10px; border-radius: 999px; }
.ri-paket-nama { font-family: var(--ri-serif); font-size: 20px; font-weight: 700; color: var(--ri-ink); margin: 0; }
.ri-paket-harga { font-family: var(--ri-serif); font-size: 26px; font-weight: 700; color: var(--ri-ink); margin: 0; }
.ri-paket-periode { font-family: var(--ri-sans); font-size: 13px; font-weight: 400; color: var(--ri-muted); }
.ri-paket-desc { font-size: 14px; color: var(--ri-body); margin: 0; }
.ri-paket-fasilitas { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.ri-paket-fasilitas li { position: relative; padding-left: 20px; font-size: 14px; color: var(--ri-body); }
.ri-paket-fasilitas li::before { content: "✓"; position: absolute; left: 0; color: var(--ri-accent); font-weight: 700; }
/* Pushes the button to the bottom so cards of unequal length still line up. */
.ri-paket-card .ri-cta-gold, .ri-paket-milik { margin-top: auto; }
.ri-paket-milik { text-align: center; font-family: var(--ri-sans); font-size: 13px; font-weight: 600; color: var(--ri-accent); background: var(--ri-accent-soft); border-radius: 999px; padding: 9px 14px; }

/* The table scrolls inside its own box — five paket are wider than a phone, and
   a page that scrolls sideways as a whole is worse than a table that does. */
.ri-paket-scroll { overflow-x: auto; }
.ri-paket-matriks { width: 100%; border-collapse: collapse; font-size: 14px; }
.ri-paket-matriks th, .ri-paket-matriks td { border-bottom: 1px solid var(--ri-line); padding: 11px 12px; text-align: center; vertical-align: middle; }
.ri-paket-matriks thead th { position: sticky; top: 0; background: var(--ri-bg); font-family: var(--ri-serif); font-size: 15px; color: var(--ri-ink); }
.ri-paket-th-harga { display: block; font-family: var(--ri-sans); font-size: 12px; font-weight: 400; color: var(--ri-muted); margin-top: 2px; }
.ri-paket-matriks tbody th[scope="row"] { text-align: left; font-family: var(--ri-sans); font-weight: 600; color: var(--ri-ink); white-space: nowrap; }
.ri-paket-row--perk th[scope="row"] { font-weight: 400; color: var(--ri-body); }
.ri-paket-yes { color: var(--ri-accent); font-weight: 700; }
.ri-paket-no { color: var(--ri-muted); }
.ri-paket-note { font-size: 12px; color: var(--ri-body); }
.ri-paket-row--tombol td, .ri-paket-row--tombol th { border-bottom: 0; padding-top: 16px; }

@media (max-width: 782px) {
  .ri-paket-grid { grid-template-columns: 1fr; }
}

/* Media di atas isi materi. Video dan audio diberi lebar penuh; jarak bawahnya
   memisahkan pemutar dari deskripsi yang biasanya ditulis di bawahnya. */
.ri-materi-media { margin: 0 0 22px; }
.ri-materi-media video, .ri-materi-media iframe { max-width: 100%; border-radius: 10px; display: block; }
.ri-materi-media audio { width: 100%; }
.ri-media-item + .ri-media-item { margin-top: 18px; }
.ri-media-label {
	font-family: var(--ri-sans); font-weight: 600; font-size: 13px; color: var(--ri-muted);
	margin: 0 0 6px; letter-spacing: .02em;
}

/* ==================================================== printable, in blocks ==
   The Buku Berjenjang detail page as separate placeable blocks. Every value
   here is an existing dashboard token — the team's design was drawn from the
   same palette, so matching it needed no new colours. See printable-blocks.php
   for why the page had to come apart in the first place. */

/* Jenjang strip — text tabs with an underline on the current one, not pills.
   Pills already mean "filter this grid" on the Jenis page; reusing them for
   "go to another Jenjang" would make the same shape mean two things. */
.ri-jtabs {
	display: flex; flex-wrap: wrap; gap: 16px; margin: 0 0 20px;
	border-bottom: 1px dashed var(--ri-line); padding-bottom: 14px;
}
.ri-jtab {
	font-family: var(--ri-sans); font-size: 13px; font-weight: 700; text-decoration: none;
	color: var(--ri-muted); border-bottom: 2px solid transparent; padding-bottom: 2px;
}
.ri-jtab:hover { color: var(--ri-body); }
.ri-jtab.is-active { color: var(--ri-ink); border-bottom-color: var(--ri-ink); }

.ri-pb-judul {
	font-family: var(--ri-serif); font-weight: 700; font-size: clamp(20px, 2.6vw, 24px);
	color: var(--ri-ink); margin: 0 0 8px;
}
.ri-pb-desc { font-size: 14px; color: var(--ri-body); line-height: 1.8; }
.ri-pb-desc p { margin: 0 0 12px; }
.ri-pb-desc ul, .ri-pb-desc ol { margin: 0 0 12px; padding-left: 20px; }
.ri-pb-desc li { margin-bottom: 4px; }
.ri-pb-desc > :last-child { margin-bottom: 0; }

/* the two versions ------------------------------------------------------- */
.ri-versi { display: flex; flex-wrap: wrap; justify-content: center; gap: 40px; margin: 0 0 32px; }
.ri-versi-col {
	display: flex; flex-direction: column; align-items: center; gap: 12px;
	width: var(--ri-lebar, 150px);
}
.ri-versi-img {
	display: block; width: 100%; aspect-ratio: var(--ri-ratio, 3/4); border-radius: 12px;
	background: var(--ri-shade) center / cover no-repeat; box-shadow: 0 4px 12px var(--ri-shadow);
}
/* Pill buttons here, not the 10px radius used elsewhere: these two sit under a
   cover with nothing else beside them, and the design reads them as a pair. */
.ri-versi .ri-btn-ghost, .ri-versi .ri-dl-btn {
	border-radius: 20px; padding: 9px 20px; font-size: 13px; text-align: center; white-space: nowrap;
}

/* cara cetak -------------------------------------------------------------- */
.ri-cara {
	/* --ri-bg, not --ri-card: --ri-card lives in ri-theme.css, which this sheet
	   does not depend on, and no Elementor control writes it. --ri-bg is the one
	   dashboard.css defines and the one the "Latar kartu" colour picker sets, so
	   this card recolours with everything else instead of sitting there ignoring
	   the Style tab. */
	background: var(--ri-bg); border: 1px solid var(--ri-line); border-radius: var(--ri-radius);
	padding: 20px 22px; margin: 0 0 32px;
}
.ri-cara-h {
	font-family: var(--ri-serif); font-weight: 700; font-size: 15px; color: var(--ri-ink);
	margin-bottom: 10px;
}
.ri-cara ol { font-size: 13.5px; color: var(--ri-body); margin: 0; padding-left: 20px; line-height: 1.8; }

@media (max-width: 600px) {
	.ri-versi { gap: 24px; }
	.ri-jtabs { gap: 12px; }
}

/* "Jenjang 1 Lainnya" — a centred row of spines, not a card grid. auto-fit so
   six books centre themselves and four still look deliberate. */
.ri-lain-covers { border-top: 1px solid var(--ri-line); padding-top: 24px; margin: 0 0 32px; }
.ri-lain-h {
	font-family: var(--ri-serif); font-weight: 700; font-size: 15px; color: var(--ri-ink);
	margin-bottom: 14px; text-align: center;
}
.ri-covers.is-center {
	grid-template-columns: repeat(auto-fit, minmax(110px, 120px)); justify-content: center;
}
.ri-covers.is-center .ri-cover-title { text-align: center; font-weight: 700; }

/* One cover, both buttons — 295 of 602 printables have only a single picture,
   so the two-column form would be the same image twice. */
.ri-versi.is-single .ri-versi-col { width: auto; max-width: 100%; }
.ri-versi.is-single .ri-versi-img { width: var(--ri-lebar, 150px); }
.ri-versi-btns { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; }

/* ===================================================== rak Premium Printable =
   [ri_printable_jenis] — the shelf. Two columns of wide cards, each naming its
   Jenis and the newest thing inside it. Same tokens as everything else, so the
   Elementor colour pickers reach it. */
.ri-jenis-grid {
	display: grid; grid-template-columns: repeat(var(--ri-cols, 2), minmax(0, 1fr)); gap: 18px;
}
.ri-jenis-card {
	display: block; text-decoration: none; color: inherit; overflow: hidden;
	background: var(--ri-bg); border: 1px solid var(--ri-line); border-radius: 14px;
	transition: box-shadow .15s ease, transform .15s ease;
}
.ri-jenis-card:hover { box-shadow: 0 8px 22px var(--ri-shadow); transform: translateY(-2px); }
.ri-jenis-img {
	position: relative; display: block; aspect-ratio: var(--ri-ratio, 16/9);
	background: var(--ri-shade) center / cover no-repeat;
}
/* Corner ribbon. Rotated out of a box wider than the card so the ends run off
   both edges — the diagonal has to be clipped by the card, not drawn to fit. */
.ri-jenis-ribbon {
	position: absolute; top: 12px; right: -30px; transform: rotate(40deg);
	background: var(--ri-gold); color: var(--ri-gold-ink);
	font-size: 10px; font-weight: 800; letter-spacing: .03em; padding: 3px 34px;
	box-shadow: 0 1px 4px rgba(0,0,0,.18);
}
.ri-jenis-body { display: block; padding: 16px; }
.ri-jenis-title {
	display: block; font-family: var(--ri-serif); font-weight: 700; font-size: 15px;
	color: var(--ri-ink); margin-bottom: 5px;
}
.ri-jenis-desc {
	display: block; font-size: 13px; color: var(--ri-muted); line-height: 1.5; margin-bottom: 10px;
}
.ri-jenis-new {
	display: flex; align-items: center; gap: 10px; margin-bottom: 10px;
	background: var(--ri-page); border-radius: 10px; padding: 8px;
}
.ri-jenis-new-img {
	flex: 0 0 auto; width: 64px; aspect-ratio: 1/1; border-radius: 6px;
	background: var(--ri-shade) center / cover no-repeat;
}
.ri-jenis-new-txt { min-width: 0; }
.ri-jenis-new-label {
	display: block; font-size: 10px; font-weight: 800; text-transform: uppercase;
	letter-spacing: .03em; color: var(--ri-accent);
}
/* One line, clipped — a long materi title must not push the card taller than
   its neighbour and break the row. */
.ri-jenis-new-title {
	display: block; font-size: 12px; font-weight: 700; color: var(--ri-ink);
	white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.ri-jenis-count {
	display: block; font-size: 12px; color: var(--ri-muted);
	padding-top: 10px; border-top: 1px solid var(--ri-line);
}
@media (max-width: 600px) { .ri-jenis-grid { grid-template-columns: 1fr; } }

/* Pill form of the Jenjang strip. The underline form says "you are reading one
   of these"; the pill form says "pick one" — right for a landing page, which is
   why the team drew it that way for /jenjang-2/ and not for a materi page. */
.ri-jtabs.is-pil {
	border-bottom: 0; padding-bottom: 0; gap: 8px; justify-content: center;
}
.ri-jtabs.is-pil .ri-jtab {
	border: 1px solid var(--ri-line); border-radius: 20px; padding: 7px 16px;
	background: var(--ri-bg); color: var(--ri-body); font-size: 12.5px;
}
.ri-jtabs.is-pil .ri-jtab:hover { border-color: var(--ri-muted); }
.ri-jtabs.is-pil .ri-jtab.is-active {
	background: var(--ri-accent); border-color: var(--ri-accent); color: #fffdf8;
}

/* ============================== rak printable, sesuai desain "Buku Berjenjang" =
   Measured off the team's own HTML rather than approximated: card width, both
   gaps, the 3/5 spine, the left-aligned title and the 10.5px status line with
   no icon. Where a number here looks oddly specific, it is because it is. */
.ri-covers.is-rak {
	/* --ri-kartu is the card width the Jenis asks for; the min is 10px under it
	   so a narrow phone can still shrink a column rather than overflow. */
	grid-template-columns: repeat(auto-fit, minmax(calc(var(--ri-kartu, 150px) - 10px), var(--ri-kartu, 150px)));
	gap: 20px 14px; justify-content: center;
}
.ri-covers.is-rak .ri-cover { gap: 0; text-align: left; }
.ri-covers.is-rak .ri-cover-img {
	aspect-ratio: var(--ri-ratio, 3/5); border-radius: 8px; margin-bottom: 6px;
	box-shadow: 0 4px 10px rgba(36, 31, 24, .12);
}
.ri-covers.is-rak .ri-cover-title {
	font-size: 12px; font-weight: 700; line-height: 1.3; margin-bottom: 2px; color: var(--ri-ink);
}
.ri-covers.is-rak .ri-cover-tick { top: 6px; left: 6px; width: 18px; height: 18px; }

/* Status as plain coloured words. "Sudah dilihat" is terracotta in the design —
   a state of its own, not a paler version of done. */
.ri-read.is-plain { display: block; font-size: 10.5px; font-weight: 400; }
.ri-read.is-plain.is-done    { color: var(--ri-accent); }
.ri-read.is-plain.is-reading { color: var(--ri-terra); }
.ri-read.is-plain.is-unread  { color: var(--ri-muted); }

/* Pills: centred, 6px apart, solid green when active. */
.ri-printable .ri-pills { justify-content: center; gap: 6px; }
.ri-printable .ri-pill {
	border: 1px solid var(--ri-line); border-radius: 20px; padding: 9px 16px;
	font-size: 13px; font-weight: 700; background: var(--ri-bg); color: var(--ri-body);
}
.ri-printable .ri-pill.is-active {
	background: var(--ri-accent); border-color: var(--ri-accent); color: #fffdf8;
}

/* ================================ dicocokkan ke berkas desain tim, 22 Agt =====
   Diukur dari halaman penjualan.html, coaching.html, coaching lanjutan.html dan
   halaman lapbook.html. Sebelumnya angka-angka ini saya kira-kira; sekarang
   diambil langsung. Where a value looks arbitrary it is copied, not chosen. */

/* -- halaman penjualan ------------------------------------------------------
   The paket name and price are NOT Lora in the design. A pricing table is read
   as data — six of them scanned across — and the serif slows that down, which
   is presumably why the team set them in the body face. */
.ri-paket-grid { gap: 14px; }
.ri-paket-card { padding: 22px 18px; border-radius: 16px; }
.ri-paket-nama { font-family: var(--ri-sans); font-size: 17px; }
.ri-paket-harga { font-family: var(--ri-sans); font-size: 22px; }
.ri-paket-desc { font-size: 12px; color: var(--ri-muted); }
.ri-paket-periode { font-size: 11px; color: var(--ri-muted); }
.ri-paket-card .ri-cta-gold {
	border-radius: 10px; padding: 11px 14px; font-size: 13px; font-weight: 800;
}
/* The free tier's button is outlined in the accent, not grey: it is still an
   invitation, just not the one being pushed. */
.ri-paket-card .ri-btn-outline {
	border-radius: 10px; padding: 10px 14px; font-size: 13px; font-weight: 700;
	border-color: var(--ri-accent); color: var(--ri-accent); background: none;
}

/* -- coaching & coaching lanjutan ------------------------------------------- */
.ri-sesi-item { border-radius: 14px; padding: 14px 16px; gap: 14px; }
.ri-sesi-no { border-radius: 10px; font-size: 13px; font-weight: 700; color: var(--ri-accent); }
.ri-cl-hero .ri-cta-gold, .ri-coaching .ri-cta-gold {
	border-radius: 10px; padding: 10px 20px; font-size: 13px; font-weight: 800;
}
/* "Gabung Zoom" is white-on-green-hero: deep green ink, not the accent, so it
   stays legible against the cream fill rather than vibrating on it. */
.ri-cl-zoom {
	border-radius: 10px; padding: 10px 18px; font-size: 13px; font-weight: 800;
	background: var(--ri-bg); color: var(--ri-green-deep); text-decoration: none;
}

/* -- halaman satu lapbook --------------------------------------------------- */
.ri-tutorial { gap: 8px; }
.ri-tut-cap { font-size: 13px; color: var(--ri-muted); }
.ri-tpl { padding: 8px 16px; font-size: 12.5px; border-radius: 20px; }
/* The printable download is a pill everywhere in the designs, never a rounded
   rectangle — same shape as Versi Cetak on the book page. */
.ri-unduh .ri-dl-btn, .ri-pd .ri-dl-btn {
	border-radius: 20px; padding: 10px 22px; font-size: 13px; font-weight: 700;
}
