diff --git a/assets/scss/style.scss b/assets/scss/style.scss
index 2a98879..e1a9bc7 100755
--- a/assets/scss/style.scss
+++ b/assets/scss/style.scss
@@ -478,3 +478,24 @@ blockquote {
.side-by-side-item {
flex-basis: 0;
}
+
+.internal-ref {
+ text-decoration: underline;
+ break-inside: avoid;
+
+ &:target {
+ @include var(background-color, target-background-color);
+ border-radius: 1rem;
+
+ .internal-ref-counter {
+ @include var(background-color, target-background-color);
+ }
+ }
+}
+
+.internal-ref-counter {
+ display: inline-block;
+ border: $standard-border;
+ border-radius: 0.5rem;
+ padding: 0 0.25rem 0 0.25rem;
+}
diff --git a/layouts/shortcodes/internal.html b/layouts/shortcodes/internal.html
new file mode 100644
index 0000000..356e5ec
--- /dev/null
+++ b/layouts/shortcodes/internal.html
@@ -0,0 +1,12 @@
+{{- $name := .Get 0 -}}
+{{- $number := 1 -}}
+{{- with .Page.Scratch.Get "internal-ref-counter" -}}
+{{- $number = add . 1 }}
+{{- end -}}
+{{- .Page.Scratch.Set "internal-ref-counter" $number -}}
+{{- .Page.Scratch.SetInMap "internal-ref" $name $number -}}
+
+
+{{ .Inner }}
+{{ $number }}
+{{- /* chomp whitespace at the end */ -}}
diff --git a/layouts/shortcodes/internalref.html b/layouts/shortcodes/internalref.html
new file mode 100644
index 0000000..9fa2a02
--- /dev/null
+++ b/layouts/shortcodes/internalref.html
@@ -0,0 +1,7 @@
+{{- $name := .Get 0 -}}
+{{- $number := index (.Page.Scratch.Get "internal-ref") $name -}}
+
+
+{{ .Inner }}
+{{ $number }}
+{{- /* chomp whitespace at the end */ -}}