2026-05-25 15:46:37 +00:00
|
|
|
/*
|
|
|
|
|
* Remap diff2html's CSS variables to Obsidian's theme variables.
|
|
|
|
|
* Because .d2h-wrapper is more specific than :root (where diff2html defines
|
|
|
|
|
* its defaults), these win without !important — and any Obsidian theme that
|
|
|
|
|
* overrides --background-primary, --color-red, etc. flows through for free.
|
|
|
|
|
*/
|
|
|
|
|
.d2h-wrapper {
|
|
|
|
|
--d2h-bg-color: var(--background-primary);
|
|
|
|
|
--d2h-border-color: var(--background-modifier-border);
|
|
|
|
|
--d2h-line-border-color: var(--background-modifier-border);
|
|
|
|
|
--d2h-file-header-bg-color: var(--background-secondary);
|
|
|
|
|
--d2h-file-header-border-color: var(--background-modifier-border);
|
|
|
|
|
--d2h-info-bg-color: var(--background-secondary);
|
|
|
|
|
--d2h-info-border-color: var(--background-modifier-border);
|
|
|
|
|
--d2h-empty-placeholder-bg-color: var(--background-secondary-alt);
|
|
|
|
|
--d2h-empty-placeholder-border-color: var(--background-modifier-border);
|
|
|
|
|
--d2h-selected-color: var(--background-modifier-hover);
|
|
|
|
|
--d2h-dim-color: var(--text-muted);
|
|
|
|
|
|
|
|
|
|
--d2h-ins-bg-color: rgba(var(--color-green-rgb), 0.15);
|
|
|
|
|
--d2h-ins-border-color: rgba(var(--color-green-rgb), 0.4);
|
|
|
|
|
--d2h-ins-highlight-bg-color: rgba(var(--color-green-rgb), 0.35);
|
|
|
|
|
--d2h-ins-label-color: var(--color-green);
|
|
|
|
|
--d2h-del-bg-color: rgba(var(--color-red-rgb), 0.15);
|
|
|
|
|
--d2h-del-border-color: rgba(var(--color-red-rgb), 0.4);
|
|
|
|
|
--d2h-del-highlight-bg-color: rgba(var(--color-red-rgb), 0.35);
|
|
|
|
|
--d2h-del-label-color: var(--color-red);
|
|
|
|
|
--d2h-change-del-color: rgba(var(--color-yellow-rgb), 0.2);
|
|
|
|
|
--d2h-change-ins-color: rgba(var(--color-green-rgb), 0.2);
|
|
|
|
|
--d2h-change-label-color: var(--color-yellow);
|
|
|
|
|
--d2h-moved-label-color: var(--color-blue);
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Dark-scheme twins: diff2html applies .d2h-dark-color-scheme or
|
|
|
|
|
* .d2h-auto-color-scheme (via prefers-color-scheme) and switches its rules
|
|
|
|
|
* to the --d2h-dark-* variables. Point those at the same Obsidian
|
|
|
|
|
* variables — Obsidian itself swaps --background-primary etc. when the
|
|
|
|
|
* vault theme toggles, so one mapping covers both modes.
|
|
|
|
|
*/
|
|
|
|
|
--d2h-dark-color: var(--text-normal);
|
|
|
|
|
--d2h-dark-bg-color: var(--background-primary);
|
|
|
|
|
--d2h-dark-border-color: var(--background-modifier-border);
|
|
|
|
|
--d2h-dark-dim-color: var(--text-muted);
|
|
|
|
|
--d2h-dark-line-border-color: var(--background-modifier-border);
|
|
|
|
|
--d2h-dark-file-header-bg-color: var(--background-secondary);
|
|
|
|
|
--d2h-dark-file-header-border-color: var(--background-modifier-border);
|
|
|
|
|
--d2h-dark-empty-placeholder-bg-color: var(--background-secondary-alt);
|
|
|
|
|
--d2h-dark-empty-placeholder-border-color: var(--background-modifier-border);
|
|
|
|
|
--d2h-dark-selected-color: var(--background-modifier-hover);
|
|
|
|
|
--d2h-dark-ins-bg-color: rgba(var(--color-green-rgb), 0.15);
|
|
|
|
|
--d2h-dark-ins-border-color: rgba(var(--color-green-rgb), 0.4);
|
|
|
|
|
--d2h-dark-ins-highlight-bg-color: rgba(var(--color-green-rgb), 0.35);
|
|
|
|
|
--d2h-dark-ins-label-color: var(--color-green);
|
|
|
|
|
--d2h-dark-del-bg-color: rgba(var(--color-red-rgb), 0.15);
|
|
|
|
|
--d2h-dark-del-border-color: rgba(var(--color-red-rgb), 0.4);
|
|
|
|
|
--d2h-dark-del-highlight-bg-color: rgba(var(--color-red-rgb), 0.35);
|
|
|
|
|
--d2h-dark-del-label-color: var(--color-red);
|
|
|
|
|
--d2h-dark-change-del-color: rgba(var(--color-yellow-rgb), 0.2);
|
|
|
|
|
--d2h-dark-change-ins-color: rgba(var(--color-green-rgb), 0.2);
|
|
|
|
|
--d2h-dark-change-label-color: var(--color-yellow);
|
|
|
|
|
--d2h-dark-moved-label-color: var(--color-blue);
|
|
|
|
|
|
|
|
|
|
color: var(--text-normal);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* ============================== */
|
|
|
|
|
/* Structural / layout fixes */
|
|
|
|
|
/* ============================== */
|
2025-11-27 12:39:08 +00:00
|
|
|
|
2025-11-24 21:29:54 +00:00
|
|
|
.d2h-wrapper {
|
2025-12-05 23:02:55 +00:00
|
|
|
container-type: size;
|
|
|
|
|
container-name: diff-wrapper;
|
2025-12-04 23:04:20 +00:00
|
|
|
transform: translateZ(0);
|
2025-12-05 23:02:55 +00:00
|
|
|
height: 100cqh;
|
2025-11-24 21:29:54 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.d2h-file-header {
|
2025-12-05 23:02:55 +00:00
|
|
|
height: 35px;
|
2026-05-25 15:46:37 +00:00
|
|
|
padding: 0;
|
2025-11-24 21:29:54 +00:00
|
|
|
}
|
|
|
|
|
|
2025-11-27 12:39:08 +00:00
|
|
|
.d2h-file-name-wrapper {
|
2026-05-25 15:46:37 +00:00
|
|
|
padding-left: 8px;
|
2025-11-24 21:29:54 +00:00
|
|
|
}
|
|
|
|
|
|
2025-12-04 23:04:20 +00:00
|
|
|
.d2h-code-linenumber {
|
|
|
|
|
cursor: default;
|
2025-11-27 16:47:21 +00:00
|
|
|
}
|
|
|
|
|
|
2025-11-27 12:39:08 +00:00
|
|
|
.d2h-file-diff {
|
2025-12-04 23:04:20 +00:00
|
|
|
overflow: auto;
|
2025-12-05 23:02:55 +00:00
|
|
|
max-height: calc(100cqh - 37px);
|
2025-12-04 23:04:20 +00:00
|
|
|
}
|
|
|
|
|
|
2026-05-25 15:46:37 +00:00
|
|
|
.d2h-diff-table {
|
|
|
|
|
position: relative;
|
2025-11-24 21:29:54 +00:00
|
|
|
}
|
|
|
|
|
|
2025-12-04 23:04:20 +00:00
|
|
|
.d2h-code-side-linenumber {
|
|
|
|
|
position: relative;
|
|
|
|
|
display: table-cell;
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-06 16:38:01 +00:00
|
|
|
/* ============================== */
|
2026-05-25 15:46:37 +00:00
|
|
|
/* Mobile Controls */
|
2025-12-06 16:38:01 +00:00
|
|
|
/* ============================== */
|
|
|
|
|
|
|
|
|
|
.diff-mobile-controls {
|
|
|
|
|
display: none; /* Hidden by default (desktop) */
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-29 14:22:44 +00:00
|
|
|
/* Avoid the floating obsidian controls */
|
|
|
|
|
@media (max-width: 600px) {
|
|
|
|
|
.diff-mobile-controls {
|
2026-01-30 10:00:16 +00:00
|
|
|
margin-bottom: 85px;
|
2026-01-29 14:22:44 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-06 16:38:01 +00:00
|
|
|
.diff-view-mobile .diff-mobile-controls {
|
|
|
|
|
display: grid;
|
|
|
|
|
grid-template-columns: 1fr 1fr;
|
|
|
|
|
gap: var(--size-4-2);
|
|
|
|
|
position: absolute;
|
|
|
|
|
bottom: 0;
|
|
|
|
|
left: 0;
|
|
|
|
|
right: 0;
|
|
|
|
|
padding: var(--size-4-3);
|
|
|
|
|
z-index: 10;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.diff-mobile-button {
|
|
|
|
|
min-height: 44px;
|
|
|
|
|
font-size: var(--font-ui-medium);
|
|
|
|
|
font-weight: var(--font-semibold);
|
|
|
|
|
border-radius: var(--button-radius);
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
border: none;
|
|
|
|
|
color: var(--text-on-accent);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.diff-mobile-accept {
|
|
|
|
|
background-color: color-mix(
|
|
|
|
|
in srgb,
|
|
|
|
|
var(--color-green) 75%,
|
|
|
|
|
var(--background-primary) 25%
|
2026-05-25 15:46:37 +00:00
|
|
|
);
|
2025-12-06 16:38:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.diff-mobile-accept:active {
|
2026-05-25 15:46:37 +00:00
|
|
|
background-color: var(--color-green);
|
2025-12-06 16:38:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.diff-mobile-reject {
|
|
|
|
|
background-color: color-mix(
|
|
|
|
|
in srgb,
|
|
|
|
|
var(--color-red) 75%,
|
|
|
|
|
var(--background-primary) 25%
|
2026-05-25 15:46:37 +00:00
|
|
|
);
|
2025-12-06 16:38:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
.diff-mobile-reject:active {
|
2026-05-25 15:46:37 +00:00
|
|
|
background-color: var(--color-red);
|
2025-12-06 16:38:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Adjust diff height on mobile to account for buttons */
|
|
|
|
|
.diff-view-mobile .d2h-file-diff {
|
|
|
|
|
max-height: calc(100cqh - 37px - 40px);
|
2026-01-30 10:00:16 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Avoid the floating obsidian controls */
|
|
|
|
|
@media (max-width: 600px) {
|
|
|
|
|
.diff-view-mobile .d2h-file-diff {
|
|
|
|
|
max-height: calc(100cqh - 37px - 120px);
|
|
|
|
|
}
|
2026-01-29 14:22:44 +00:00
|
|
|
}
|