<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Costa Sano KB  - Recent changes [en]</title>
		<link>https://kb.costasano.club/Special:RecentChanges</link>
		<description>Track the most recent changes to the wiki in this feed.</description>
		<language>en</language>
		<generator>MediaWiki 1.45.2</generator>
		<lastBuildDate>Mon, 21 Sep 2026 22:39:17 GMT</lastBuildDate>
		<item>
			<title>Platform:Drupal/Tracing Drupal Storage</title>
			<link>https://kb.costasano.club/index.php?title=Platform:Drupal/Tracing_Drupal_Storage&amp;diff=1402&amp;oldid=0</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Platform:Drupal/Tracing_Drupal_Storage&amp;diff=1402&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;= Tracing Drupal Storage — From File to Physical Disk =  == Purpose == This document explains how to trace a Drupal file through the different storage layers of the Costa Sano infrastructure:  &amp;lt;code&amp;gt;Drupal file      ↓  Linux filesystem      ↓  Linux block device      ↓  Hyper-V virtual disk      ↓  VHDX file      ↓  Windows storage volume      ↓  physical disk&amp;lt;/code&amp;gt; The important concept is that &amp;#039;&amp;#039;&amp;#039;each layer hides the implementation details of the layer b...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Tracing Drupal Storage — From File to Physical Disk =&lt;br /&gt;
&lt;br /&gt;
== Purpose ==&lt;br /&gt;
This document explains how to trace a Drupal file through the different storage layers of the Costa Sano infrastructure:&lt;br /&gt;
 &amp;lt;code&amp;gt;Drupal file&lt;br /&gt;
     ↓&lt;br /&gt;
 Linux filesystem&lt;br /&gt;
     ↓&lt;br /&gt;
 Linux block device&lt;br /&gt;
     ↓&lt;br /&gt;
 Hyper-V virtual disk&lt;br /&gt;
     ↓&lt;br /&gt;
 VHDX file&lt;br /&gt;
     ↓&lt;br /&gt;
 Windows storage volume&lt;br /&gt;
     ↓&lt;br /&gt;
 physical disk&amp;lt;/code&amp;gt;&lt;br /&gt;
The important concept is that &amp;#039;&amp;#039;&amp;#039;each layer hides the implementation details of the layer below it&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Drupal does not need to know which physical disk contains a file.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= 1. The logical view seen by Drupal =&lt;br /&gt;
Drupal works with a normal filesystem path such as:&lt;br /&gt;
 &amp;lt;code&amp;gt;/var/www/drupal/web/sites/default/files/example.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
Drupal does not refer to:&lt;br /&gt;
 &amp;lt;code&amp;gt;/dev/sda&amp;lt;/code&amp;gt;&lt;br /&gt;
and does not know that the storage is a Hyper-V VHDX.&lt;br /&gt;
&lt;br /&gt;
The Drupal application simply asks the operating system to read or write a file at the given path.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= 2. Linux filesystem layer =&lt;br /&gt;
In the current Costa Sano configuration, the Drupal media directory is mounted on a separate XFS filesystem.&lt;br /&gt;
&lt;br /&gt;
The relationship is:&lt;br /&gt;
 &amp;lt;code&amp;gt;/var/www/drupal/web/sites/default/files&lt;br /&gt;
         ↓&lt;br /&gt;
 XFS filesystem&lt;br /&gt;
         ↓&lt;br /&gt;
 UUID=06d91c93-c2cb-4185-884b-13b02e47f5ac&amp;lt;/code&amp;gt;&lt;br /&gt;
The filesystem UUID is the stable Linux identity of the filesystem.&lt;br /&gt;
&lt;br /&gt;
The device name &amp;lt;code&amp;gt;/dev/sda&amp;lt;/code&amp;gt; should &amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; be treated as the permanent identity.&lt;br /&gt;
&lt;br /&gt;
Linux device names can change.&lt;br /&gt;
&lt;br /&gt;
The UUID is what is used in &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= 3. &amp;lt;code&amp;gt;stat&amp;lt;/code&amp;gt; — examine the file =&lt;br /&gt;
For an individual Drupal file:&lt;br /&gt;
 &amp;lt;code&amp;gt;stat /var/www/drupal/web/sites/default/files/example.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;stat&amp;lt;/code&amp;gt; reports information about the file itself, including:&lt;br /&gt;
&lt;br /&gt;
* size;&lt;br /&gt;
* owner;&lt;br /&gt;
* group;&lt;br /&gt;
* permissions;&lt;br /&gt;
* timestamps;&lt;br /&gt;
* inode information.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;stat&amp;lt;/code&amp;gt; is therefore the starting point when investigating a particular file.&lt;br /&gt;
&lt;br /&gt;
It does not normally tell us directly which physical device hosts the file.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= 4. &amp;lt;code&amp;gt;df&amp;lt;/code&amp;gt; — identify the filesystem hosting the file =&lt;br /&gt;
To determine which filesystem contains a particular file:&lt;br /&gt;
 &amp;lt;code&amp;gt;df -h /var/www/drupal/web/sites/default/files/example.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
Typical result:&lt;br /&gt;
 &amp;lt;code&amp;gt;Filesystem      Size  Used Avail Use% Mounted on&lt;br /&gt;
 /dev/sda        254G  ...  ...   ...  /var/www/drupal/web/sites/default/files&amp;lt;/code&amp;gt;&lt;br /&gt;
This tells us:&lt;br /&gt;
 &amp;lt;code&amp;gt;example.pdf&lt;br /&gt;
     ↓&lt;br /&gt;
 filesystem mounted at&lt;br /&gt;
 /var/www/drupal/web/sites/default/files&lt;br /&gt;
     ↓&lt;br /&gt;
 /dev/sda&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;df&amp;lt;/code&amp;gt; therefore answers:&amp;lt;blockquote&amp;gt;&amp;#039;&amp;#039;&amp;#039;Which filesystem provides the storage for this path?&amp;#039;&amp;#039;&amp;#039;&amp;lt;/blockquote&amp;gt;The same command can be used on the directory itself:&lt;br /&gt;
 &amp;lt;code&amp;gt;df -h /var/www/drupal/web/sites/default/files&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= 5. &amp;lt;code&amp;gt;findmnt&amp;lt;/code&amp;gt; — show the mount relationship =&lt;br /&gt;
Use:&lt;br /&gt;
 &amp;lt;code&amp;gt;findmnt -T /var/www/drupal/web/sites/default/files/example.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
or:&lt;br /&gt;
 &amp;lt;code&amp;gt;findmnt /var/www/drupal/web/sites/default/files&amp;lt;/code&amp;gt;&lt;br /&gt;
Typical result:&lt;br /&gt;
 &amp;lt;code&amp;gt;TARGET                              SOURCE   FSTYPE&lt;br /&gt;
 /var/www/drupal/web/sites/default/files&lt;br /&gt;
                                     /dev/sda xfs&amp;lt;/code&amp;gt;&lt;br /&gt;
This makes the relationship explicit:&lt;br /&gt;
 &amp;lt;code&amp;gt;/dev/sda&lt;br /&gt;
     ↓&lt;br /&gt;
 XFS filesystem&lt;br /&gt;
     ↓&lt;br /&gt;
 /var/www/drupal/web/sites/default/files&amp;lt;/code&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;-T&amp;lt;/code&amp;gt; option is particularly useful because it asks:&amp;lt;blockquote&amp;gt;Which mounted filesystem contains this path?&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= 6. &amp;lt;code&amp;gt;lsblk&amp;lt;/code&amp;gt; — inspect Linux block devices =&lt;br /&gt;
Use:&lt;br /&gt;
 &amp;lt;code&amp;gt;lsblk -f&amp;lt;/code&amp;gt;&lt;br /&gt;
This shows Linux block devices, filesystems, UUIDs and mount points.&lt;br /&gt;
&lt;br /&gt;
The media disk appears approximately as:&lt;br /&gt;
 &amp;lt;code&amp;gt;NAME FSTYPE UUID                                 MOUNTPOINTS&lt;br /&gt;
 sda  xfs    06d91c93-c2cb-4185-884b-13b02e47f5ac /var/www/drupal/web/sites/default/files&lt;br /&gt;
 sdb&lt;br /&gt;
 ├─...&amp;lt;/code&amp;gt;&lt;br /&gt;
This connects:&lt;br /&gt;
 &amp;lt;code&amp;gt;/dev/sda&lt;br /&gt;
     ↓&lt;br /&gt;
 XFS&lt;br /&gt;
     ↓&lt;br /&gt;
 UUID&lt;br /&gt;
     ↓&lt;br /&gt;
 Drupal files mount point&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;lsblk&amp;lt;/code&amp;gt; is therefore primarily a &amp;#039;&amp;#039;&amp;#039;block-device view&amp;#039;&amp;#039;&amp;#039;, whereas &amp;lt;code&amp;gt;findmnt&amp;lt;/code&amp;gt; is primarily a &amp;#039;&amp;#039;&amp;#039;mount relationship view&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= 7. &amp;lt;code&amp;gt;blkid&amp;lt;/code&amp;gt; — identify the filesystem by UUID =&lt;br /&gt;
Use:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo blkid /dev/sda&amp;lt;/code&amp;gt;&lt;br /&gt;
For the Costa Sano media disk the result is:&lt;br /&gt;
 &amp;lt;code&amp;gt;/dev/sda: UUID=&amp;quot;06d91c93-c2cb-4185-884b-13b02e47f5ac&amp;quot; BLOCK_SIZE=&amp;quot;4096&amp;quot; TYPE=&amp;quot;xfs&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
The UUID is important because &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt; uses it to identify the filesystem.&lt;br /&gt;
&lt;br /&gt;
The permanent configuration is:&lt;br /&gt;
 &amp;lt;code&amp;gt;UUID=06d91c93-c2cb-4185-884b-13b02e47f5ac /var/www/drupal/web/sites/default/files xfs defaults 0 0&amp;lt;/code&amp;gt;&lt;br /&gt;
Therefore Linux does not depend on the disk being called &amp;lt;code&amp;gt;/dev/sda&amp;lt;/code&amp;gt; after a reboot.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= 8. Complete Linux-side investigation =&lt;br /&gt;
For one particular Drupal file, the following sequence gives the complete Linux-side picture.&lt;br /&gt;
&lt;br /&gt;
=== Step 1 — file ===&lt;br /&gt;
 &amp;lt;code&amp;gt;stat /var/www/drupal/web/sites/default/files/example.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 2 — filesystem ===&lt;br /&gt;
 &amp;lt;code&amp;gt;df -h /var/www/drupal/web/sites/default/files/example.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 3 — mount relationship ===&lt;br /&gt;
 &amp;lt;code&amp;gt;findmnt -T /var/www/drupal/web/sites/default/files/example.pdf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 4 — block devices ===&lt;br /&gt;
 &amp;lt;code&amp;gt;lsblk -f&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Step 5 — filesystem identity ===&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo blkid /dev/sda&amp;lt;/code&amp;gt;&lt;br /&gt;
The result is conceptually:&lt;br /&gt;
 &amp;lt;code&amp;gt;Drupal file&lt;br /&gt;
     ↓&lt;br /&gt;
 /var/www/drupal/web/sites/default/files/example.pdf&lt;br /&gt;
     ↓&lt;br /&gt;
 /dev/sda&lt;br /&gt;
     ↓&lt;br /&gt;
 XFS&lt;br /&gt;
     ↓&lt;br /&gt;
 UUID=06d91c93-c2cb-4185-884b-13b02e47f5ac&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= 9. Crossing the virtualization boundary =&lt;br /&gt;
Up to this point we are inside the AlmaLinux VM.&lt;br /&gt;
&lt;br /&gt;
The Linux operating system knows:&lt;br /&gt;
 &amp;lt;code&amp;gt;/dev/sda&amp;lt;/code&amp;gt;&lt;br /&gt;
but Linux does not know that this virtual disk is physically represented by a VHDX file on the Windows Server.&lt;br /&gt;
&lt;br /&gt;
That information belongs to Hyper-V.&lt;br /&gt;
&lt;br /&gt;
The next layer is therefore:&lt;br /&gt;
 &amp;lt;code&amp;gt;Linux /dev/sda&lt;br /&gt;
         ↓&lt;br /&gt;
 Hyper-V virtual disk&lt;br /&gt;
         ↓&lt;br /&gt;
 VHDX&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= 10. Hyper-V disk configuration =&lt;br /&gt;
On the Windows Server Hyper-V host, the Drupal VM has:&lt;br /&gt;
 &amp;lt;code&amp;gt;IDE Controller 0&lt;br /&gt;
 ├── Device 0 → original 127 GB VHDX&lt;br /&gt;
 └── Device 1 → new 254 GB VHDX&amp;lt;/code&amp;gt;&lt;br /&gt;
The new media disk is the second virtual disk attached to the controller.&lt;br /&gt;
&lt;br /&gt;
An important lesson from the migration is:&amp;lt;blockquote&amp;gt;Hyper-V&amp;#039;s disk numbering and Linux&amp;#039;s &amp;lt;code&amp;gt;/dev/sdX&amp;lt;/code&amp;gt; naming are different naming systems.&amp;lt;/blockquote&amp;gt;Therefore:&lt;br /&gt;
 &amp;lt;code&amp;gt;Hyper-V Device 1&amp;lt;/code&amp;gt;&lt;br /&gt;
does not imply:&lt;br /&gt;
 &amp;lt;code&amp;gt;/dev/sdb&amp;lt;/code&amp;gt;&lt;br /&gt;
Linux assigned &amp;lt;code&amp;gt;/dev/sda&amp;lt;/code&amp;gt; to the new 254 GB disk in this case.&lt;br /&gt;
&lt;br /&gt;
Disk identification should therefore be based on reliable properties such as:&lt;br /&gt;
&lt;br /&gt;
* size;&lt;br /&gt;
* partitions;&lt;br /&gt;
* filesystem;&lt;br /&gt;
* UUID;&lt;br /&gt;
* mount point.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= 11. PowerShell — identify the VHDX attached to the VM =&lt;br /&gt;
On the Windows Server Hyper-V host, PowerShell can show the virtual disks attached to the VM:&lt;br /&gt;
 &amp;lt;code&amp;gt;Get-VMHardDiskDrive -VMName &amp;quot;YOUR-DRUPAL-VM&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
This shows information including:&lt;br /&gt;
&lt;br /&gt;
* VM name;&lt;br /&gt;
* controller type;&lt;br /&gt;
* controller number;&lt;br /&gt;
* device location;&lt;br /&gt;
* VHDX path.&lt;br /&gt;
&lt;br /&gt;
Conceptually the result is:&lt;br /&gt;
 &amp;lt;code&amp;gt;VMName     ControllerType  ControllerLocation  Path&lt;br /&gt;
 Drupal     IDE             0                  D:\...\Drupal-System.vhdx&lt;br /&gt;
 Drupal     IDE             1                  D:\...\Drupal-Media.vhdx&amp;lt;/code&amp;gt;&lt;br /&gt;
The exact path depends on the Hyper-V configuration.&lt;br /&gt;
&lt;br /&gt;
This establishes the relationship:&lt;br /&gt;
 &amp;lt;code&amp;gt;Linux /dev/sda&lt;br /&gt;
         ↓&lt;br /&gt;
 Hyper-V IDE 0 / Device 1&lt;br /&gt;
         ↓&lt;br /&gt;
 Drupal-Media.vhdx&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= 12. &amp;lt;code&amp;gt;Get-VHD&amp;lt;/code&amp;gt; — inspect the VHDX =&lt;br /&gt;
PowerShell can inspect the virtual disk itself:&lt;br /&gt;
 &amp;lt;code&amp;gt;Get-VHD -Path &amp;quot;D:\...\Drupal-Media.vhdx&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
This can show information such as:&lt;br /&gt;
&lt;br /&gt;
* VHDX path;&lt;br /&gt;
* virtual disk format;&lt;br /&gt;
* disk type;&lt;br /&gt;
* virtual size;&lt;br /&gt;
* physical file size;&lt;br /&gt;
* block size.&lt;br /&gt;
&lt;br /&gt;
The important point is that Hyper-V now gives us the identity of the virtual storage object that Linux sees as its virtual disk.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= 13. Identify the Windows volume containing the VHDX =&lt;br /&gt;
Suppose the VHDX is located at:&lt;br /&gt;
 &amp;lt;code&amp;gt;D:\Hyper-V\Virtual Hard Disks\Drupal-Media.vhdx&amp;lt;/code&amp;gt;&lt;br /&gt;
The VHDX is therefore stored on the Windows &amp;lt;code&amp;gt;D:&amp;lt;/code&amp;gt; volume.&lt;br /&gt;
&lt;br /&gt;
PowerShell:&lt;br /&gt;
 &amp;lt;code&amp;gt;Get-Volume -DriveLetter D&amp;lt;/code&amp;gt;&lt;br /&gt;
This identifies the Windows volume.&lt;br /&gt;
&lt;br /&gt;
Conceptually:&lt;br /&gt;
 &amp;lt;code&amp;gt;Drupal-Media.vhdx&lt;br /&gt;
         ↓&lt;br /&gt;
 D:&lt;br /&gt;
         ↓&lt;br /&gt;
 Windows NTFS volume&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= 14. Identify the physical disk behind the Windows volume =&lt;br /&gt;
To identify the partition containing &amp;lt;code&amp;gt;D:&amp;lt;/code&amp;gt;:&lt;br /&gt;
 &amp;lt;code&amp;gt;Get-Partition -DriveLetter D&amp;lt;/code&amp;gt;&lt;br /&gt;
This provides the Windows disk number.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
 &amp;lt;code&amp;gt;DiskNumber       : 2&lt;br /&gt;
 PartitionNumber  : 1&lt;br /&gt;
 DriveLetter      : D&amp;lt;/code&amp;gt;&lt;br /&gt;
Then inspect that disk:&lt;br /&gt;
 &amp;lt;code&amp;gt;Get-Disk -Number 2&amp;lt;/code&amp;gt;&lt;br /&gt;
This gives information about the physical disk, including:&lt;br /&gt;
&lt;br /&gt;
* disk number;&lt;br /&gt;
* model;&lt;br /&gt;
* size;&lt;br /&gt;
* bus type;&lt;br /&gt;
* operational status;&lt;br /&gt;
* health.&lt;br /&gt;
&lt;br /&gt;
The physical storage devices can also be listed with:&lt;br /&gt;
 &amp;lt;code&amp;gt;Get-PhysicalDisk&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= 15. Complete storage chain =&lt;br /&gt;
The complete Costa Sano media storage chain is therefore:&lt;br /&gt;
 &amp;lt;code&amp;gt;┌─────────────────────────────────────────────┐&lt;br /&gt;
 │ Drupal                                      │&lt;br /&gt;
 │                                             │&lt;br /&gt;
 │ /sites/default/files/example.pdf            │&lt;br /&gt;
 └──────────────────────┬──────────────────────┘&lt;br /&gt;
                        │&lt;br /&gt;
                        ▼&lt;br /&gt;
 ┌─────────────────────────────────────────────┐&lt;br /&gt;
 │ AlmaLinux 10.2                              │&lt;br /&gt;
 │                                             │&lt;br /&gt;
 │ XFS filesystem                              │&lt;br /&gt;
 │ UUID=06d91c93-c2cb-4185-884b-13b02e47f5ac   │&lt;br /&gt;
 │                                             │&lt;br /&gt;
 │ /dev/sda                                    │&lt;br /&gt;
 └──────────────────────┬──────────────────────┘&lt;br /&gt;
                        │&lt;br /&gt;
                        ▼&lt;br /&gt;
 ┌─────────────────────────────────────────────┐&lt;br /&gt;
 │ Hyper-V                                     │&lt;br /&gt;
 │                                             │&lt;br /&gt;
 │ IDE Controller 0 / Device 1                 │&lt;br /&gt;
 │                                             │&lt;br /&gt;
 │ 254 GB Drupal-Media.vhdx                    │&lt;br /&gt;
 └──────────────────────┬──────────────────────┘&lt;br /&gt;
                        │&lt;br /&gt;
                        ▼&lt;br /&gt;
 ┌─────────────────────────────────────────────┐&lt;br /&gt;
 │ Windows Server 2019                         │&lt;br /&gt;
 │                                             │&lt;br /&gt;
 │ D:\Hyper-V\...\Drupal-Media.vhdx            │&lt;br /&gt;
 │                                             │&lt;br /&gt;
 │ NTFS volume                                 │&lt;br /&gt;
 └──────────────────────┬──────────────────────┘&lt;br /&gt;
                        │&lt;br /&gt;
                        ▼&lt;br /&gt;
 ┌─────────────────────────────────────────────┐&lt;br /&gt;
 │ Physical storage                            │&lt;br /&gt;
 │                                             │&lt;br /&gt;
 │ SSD / HDD / storage device                  │&lt;br /&gt;
 └─────────────────────────────────────────────┘&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= 16. The abstraction principle =&lt;br /&gt;
The important architectural lesson is that &amp;#039;&amp;#039;&amp;#039;each layer provides a stable logical interface to the layer above it&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Drupal sees:&lt;br /&gt;
 &amp;lt;code&amp;gt;/var/www/drupal/web/sites/default/files&amp;lt;/code&amp;gt;&lt;br /&gt;
Linux sees:&lt;br /&gt;
 &amp;lt;code&amp;gt;XFS filesystem&lt;br /&gt;
 UUID=06d91c93...&amp;lt;/code&amp;gt;&lt;br /&gt;
Linux&amp;#039;s block layer sees:&lt;br /&gt;
 &amp;lt;code&amp;gt;/dev/sda&amp;lt;/code&amp;gt;&lt;br /&gt;
Hyper-V sees:&lt;br /&gt;
 &amp;lt;code&amp;gt;254 GB VHDX&amp;lt;/code&amp;gt;&lt;br /&gt;
Windows sees:&lt;br /&gt;
 &amp;lt;code&amp;gt;D:\...\Drupal-Media.vhdx&amp;lt;/code&amp;gt;&lt;br /&gt;
The physical storage subsystem sees:&lt;br /&gt;
 &amp;lt;code&amp;gt;physical disk&amp;lt;/code&amp;gt;&lt;br /&gt;
Drupal does not need to know any of the details below its filesystem path.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= 17. Why the migration worked without changing Drupal =&lt;br /&gt;
Before the migration:&lt;br /&gt;
 &amp;lt;code&amp;gt;Drupal&lt;br /&gt;
    ↓&lt;br /&gt;
 /var/www/drupal/web/sites/default/files&lt;br /&gt;
    ↓&lt;br /&gt;
 original filesystem&amp;lt;/code&amp;gt;&lt;br /&gt;
After the migration:&lt;br /&gt;
 &amp;lt;code&amp;gt;Drupal&lt;br /&gt;
    ↓&lt;br /&gt;
 /var/www/drupal/web/sites/default/files&lt;br /&gt;
    ↓&lt;br /&gt;
 new XFS filesystem&lt;br /&gt;
    ↓&lt;br /&gt;
 254 GB VHDX&amp;lt;/code&amp;gt;&lt;br /&gt;
The Drupal path remained unchanged.&lt;br /&gt;
&lt;br /&gt;
Therefore no Drupal configuration needed to be changed.&lt;br /&gt;
&lt;br /&gt;
Only the filesystem underneath the path changed.&lt;br /&gt;
&lt;br /&gt;
This is the reason a separate media VHDX can be introduced without making Drupal aware of the storage implementation.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= 18. Linux versus Windows storage abstraction =&lt;br /&gt;
Windows commonly exposes storage to users through drive letters:&lt;br /&gt;
 &amp;lt;code&amp;gt;C:\&lt;br /&gt;
 D:\&lt;br /&gt;
 E:\&amp;lt;/code&amp;gt;&lt;br /&gt;
Linux instead presents a unified filesystem namespace:&lt;br /&gt;
 &amp;lt;code&amp;gt;/&lt;br /&gt;
 ├── boot&lt;br /&gt;
 ├── home&lt;br /&gt;
 ├── var&lt;br /&gt;
 │   └── www&lt;br /&gt;
 │       └── drupal&lt;br /&gt;
 │           └── web&lt;br /&gt;
 │               └── sites&lt;br /&gt;
 │                   └── default&lt;br /&gt;
 │                       ├── files&lt;br /&gt;
 │                       └── files.old&amp;lt;/code&amp;gt;&lt;br /&gt;
Different filesystems can be mounted at different points in this single hierarchy.&lt;br /&gt;
&lt;br /&gt;
Therefore these two directories can appear next to each other:&lt;br /&gt;
 &amp;lt;code&amp;gt;files/&lt;br /&gt;
 files.old/&amp;lt;/code&amp;gt;&lt;br /&gt;
while actually residing on different filesystems.&lt;br /&gt;
&lt;br /&gt;
In the current Costa Sano migration:&lt;br /&gt;
 &amp;lt;code&amp;gt;files/&lt;br /&gt;
     ↓&lt;br /&gt;
 254 GB VHDX&lt;br /&gt;
 &lt;br /&gt;
 files.old/&lt;br /&gt;
     ↓&lt;br /&gt;
 original Drupal/system filesystem&amp;lt;/code&amp;gt;&lt;br /&gt;
The user sees one directory tree.&lt;br /&gt;
&lt;br /&gt;
Linux manages the storage boundaries underneath it.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= 19. Practical investigation recipe =&lt;br /&gt;
When asking:&amp;lt;blockquote&amp;gt;&amp;#039;&amp;#039;&amp;#039;&amp;quot;Where is this Drupal file actually stored?&amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;lt;/blockquote&amp;gt;start with the file:&lt;br /&gt;
 &amp;lt;code&amp;gt;stat /path/to/file&amp;lt;/code&amp;gt;&lt;br /&gt;
Then:&lt;br /&gt;
 &amp;lt;code&amp;gt;df -h /path/to/file&amp;lt;/code&amp;gt;&lt;br /&gt;
Then:&lt;br /&gt;
 &amp;lt;code&amp;gt;findmnt -T /path/to/file&amp;lt;/code&amp;gt;&lt;br /&gt;
Then:&lt;br /&gt;
 &amp;lt;code&amp;gt;lsblk -f&amp;lt;/code&amp;gt;&lt;br /&gt;
Then identify the filesystem UUID:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo blkid /dev/sda&amp;lt;/code&amp;gt;&lt;br /&gt;
On the Hyper-V host, continue with:&lt;br /&gt;
 &amp;lt;code&amp;gt;Get-VMHardDiskDrive -VMName &amp;quot;YOUR-DRUPAL-VM&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
then:&lt;br /&gt;
 &amp;lt;code&amp;gt;Get-VHD -Path &amp;quot;path-to-the-vhdx&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
then identify the Windows volume:&lt;br /&gt;
 &amp;lt;code&amp;gt;Get-Volume -DriveLetter D&amp;lt;/code&amp;gt;&lt;br /&gt;
then the physical disk:&lt;br /&gt;
 &amp;lt;code&amp;gt;Get-Partition -DriveLetter D&lt;br /&gt;
 Get-Disk -Number &amp;lt;disk-number&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
This allows the complete path to be traced from:&lt;br /&gt;
 &amp;lt;code&amp;gt;Drupal file&lt;br /&gt;
     ↓&lt;br /&gt;
 Linux filesystem&lt;br /&gt;
     ↓&lt;br /&gt;
 Linux block device&lt;br /&gt;
     ↓&lt;br /&gt;
 Hyper-V virtual disk&lt;br /&gt;
     ↓&lt;br /&gt;
 VHDX file&lt;br /&gt;
     ↓&lt;br /&gt;
 Windows volume&lt;br /&gt;
     ↓&lt;br /&gt;
 physical disk&amp;lt;/code&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
= 20. Mental model =&lt;br /&gt;
A useful way to remember the whole mechanism is:&amp;lt;blockquote&amp;gt;&amp;#039;&amp;#039;&amp;#039;The application sees a pathname.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Linux maps the pathname to a filesystem.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The filesystem is identified by a UUID.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Linux connects that filesystem to a block device.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Hyper-V presents that block device as a virtual disk.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The virtual disk is implemented by a VHDX.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Windows stores that VHDX on physical storage.&amp;#039;&amp;#039;&amp;#039;&amp;lt;/blockquote&amp;gt;Each layer can change internally while preserving the interface presented to the layer above.&lt;br /&gt;
&lt;br /&gt;
That abstraction is what allowed the Costa Sano media storage to move from the original Drupal filesystem to a separate 254 GB VHDX &amp;#039;&amp;#039;&amp;#039;without changing Drupal&amp;#039;s file paths or configuration&amp;#039;&amp;#039;&amp;#039;.&lt;/div&gt;</description>
			<pubDate>Sun, 20 Sep 2026 18:21:46 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Talk:Platform:Drupal/Tracing_Drupal_Storage</comments>
		</item>
		<item>
			<title>Platforms:Drupal/Drupal storage migration - énd vdisk</title>
			<link>https://kb.costasano.club/index.php?title=Platforms:Drupal/Drupal_storage_migration_-_%C3%A9nd_vdisk&amp;diff=1401&amp;oldid=0</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Platforms:Drupal/Drupal_storage_migration_-_%C3%A9nd_vdisk&amp;diff=1401&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Mngr&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Mngr (page does not exist)&quot;&gt;&lt;bdi&gt;Mngr&lt;/bdi&gt;&lt;/a&gt; moved page &lt;a href=&quot;/index.php?title=Platforms:Drupal/Drupal_storage_migration_-_%C3%A9nd_vdisk&amp;amp;redirect=no&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Platforms:Drupal/Drupal storage migration - énd vdisk (page does not exist)&quot;&gt;Platforms:Drupal/Drupal storage migration - énd vdisk&lt;/a&gt; to &lt;a href=&quot;/Platforms:Drupal/Drupal_storage_migration_-_2nd_vdisk&quot; title=&quot;Platforms:Drupal/Drupal storage migration - 2nd vdisk&quot;&gt;Platforms:Drupal/Drupal storage migration - 2nd vdisk&lt;/a&gt; without leaving a redirect&lt;/p&gt;
</description>
			<pubDate>Sun, 20 Sep 2026 16:38:06 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Platforms_Talk:Drupal/Drupal_storage_migration_-_%C3%A9nd_vdisk</comments>
		</item>
		<item>
			<title>Platforms:Drupal/Drupal storage migration - énd vdisk</title>
			<link>https://kb.costasano.club/index.php?title=Platforms:Drupal/Drupal_storage_migration_-_%C3%A9nd_vdisk&amp;diff=1400&amp;oldid=0</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Platforms:Drupal/Drupal_storage_migration_-_%C3%A9nd_vdisk&amp;diff=1400&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;= Drupal Media Storage Migration — Separate Hyper-V VHDX =  == Purpose == This document describes a safe way to move the Drupal media storage from the Drupal VM&amp;#039;s existing filesystem onto a separate Hyper-V virtual disk (VHDX).  The objective is to obtain:  * simple local storage from Drupal&amp;#039;s point of view; * separation between the Drupal application/system disk and large media storage; * easy future expansion of the media storage; * no dependency on NFS or remote fil...&amp;quot;&lt;/p&gt;
</description>
			<pubDate>Sun, 20 Sep 2026 16:37:31 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Platforms_Talk:Drupal/Drupal_storage_migration_-_%C3%A9nd_vdisk</comments>
		</item>
		<item>
			<title>Platforms:Drupal/Using Private Storage space</title>
			<link>https://kb.costasano.club/index.php?title=Platforms:Drupal/Using_Private_Storage_space&amp;diff=1399&amp;oldid=1396</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Platforms:Drupal/Using_Private_Storage_space&amp;diff=1399&amp;oldid=1396</guid>
			<description>&lt;p&gt;&lt;/p&gt;
</description>
			<pubDate>Sun, 20 Sep 2026 16:01:23 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Platforms_Talk:Drupal/Using_Private_Storage_space</comments>
		</item>
		<item>
			<title>Platforms:Drupal/To Synology</title>
			<link>https://kb.costasano.club/index.php?title=Platforms:Drupal/To_Synology&amp;diff=1396&amp;oldid=1394</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Platforms:Drupal/To_Synology&amp;diff=1396&amp;oldid=1394</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Mngr&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Mngr (page does not exist)&quot;&gt;&lt;bdi&gt;Mngr&lt;/bdi&gt;&lt;/a&gt; moved page &lt;a href=&quot;/index.php?title=Platforms:Drupal/To_Synology&amp;amp;redirect=no&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Platforms:Drupal/To Synology (page does not exist)&quot;&gt;Platforms:Drupal/To Synology&lt;/a&gt; to &lt;a href=&quot;/Platforms:Drupal/Using_Private_Storage_space&quot; title=&quot;Platforms:Drupal/Using Private Storage space&quot;&gt;Platforms:Drupal/Using Private Storage space&lt;/a&gt; without leaving a redirect&lt;/p&gt;
</description>
			<pubDate>Sun, 20 Sep 2026 15:15:53 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Platforms_Talk:Drupal/To_Synology</comments>
		</item>
		<item>
			<title>Platforms:Drupal/To Synology</title>
			<link>https://kb.costasano.club/index.php?title=Platforms:Drupal/To_Synology&amp;diff=1394&amp;oldid=0</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Platforms:Drupal/To_Synology&amp;diff=1394&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;= Drupal Media Storage on Synology NAS via NFS = This document explains how to relocate Drupal’s &amp;lt;code&amp;gt;public://&amp;lt;/code&amp;gt; media directory to a Synology NAS using NFS. This approach provides stable, scalable storage for large archives (500 GB+) while keeping the Drupal VM lightweight and maintainable. ----  == 1. Overview == Drupal stores uploaded media in &amp;lt;code&amp;gt;sites/default/files&amp;lt;/code&amp;gt;, mapped internally as &amp;lt;code&amp;gt;public://&amp;lt;/code&amp;gt;. For large archives, it is recommended...&amp;quot;&lt;/p&gt;
</description>
			<pubDate>Fri, 18 Sep 2026 14:03:40 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Platforms_Talk:Drupal/To_Synology</comments>
		</item>
		<item>
			<title>Project:PubModel/mozilla pdf.js viewer user guide</title>
			<link>https://kb.costasano.club/index.php?title=Project:PubModel/mozilla_pdf.js_viewer_user_guide&amp;diff=1393&amp;oldid=1392</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:PubModel/mozilla_pdf.js_viewer_user_guide&amp;diff=1393&amp;oldid=1392</guid>
			<description>&lt;p&gt;&lt;/p&gt;
</description>
			<pubDate>Fri, 18 Sep 2026 10:16:05 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:PubModel/mozilla_pdf.js_viewer_user_guide</comments>
		</item>
		<item>
			<title>Project:PubModel/mozilla pdf.js viewer user guide</title>
			<link>https://kb.costasano.club/index.php?title=Project:PubModel/mozilla_pdf.js_viewer_user_guide&amp;diff=1392&amp;oldid=0</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:PubModel/mozilla_pdf.js_viewer_user_guide&amp;diff=1392&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;= PDF.js Viewer – Simple User Guide for Historians =  The Mozilla PDF.js viewer is the built‑in PDF reader used in Firefox and available as a standalone viewer (viewer.html).  This guide explains only the practical functions historians need when reading archival PDFs, without developer jargon.  == 1. Opening a PDF == * Click the &amp;#039;&amp;#039;&amp;#039;Menu icon&amp;#039;&amp;#039;&amp;#039; (top right) → &amp;#039;&amp;#039;&amp;#039;Open File&amp;#039;&amp;#039;&amp;#039;. * Or simply &amp;#039;&amp;#039;&amp;#039;drag and drop&amp;#039;&amp;#039;&amp;#039; a PDF into the viewer window.  == 2. Navigating Pages == *...&amp;quot;&lt;/p&gt;
</description>
			<pubDate>Fri, 18 Sep 2026 07:41:29 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:PubModel/mozilla_pdf.js_viewer_user_guide</comments>
		</item>
		<item>
			<title>Platforms:AlmaLinux/Update procedure</title>
			<link>https://kb.costasano.club/index.php?title=Platforms:AlmaLinux/Update_procedure&amp;diff=1391&amp;oldid=393</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Platforms:AlmaLinux/Update_procedure&amp;diff=1391&amp;oldid=393</guid>
			<description>&lt;p&gt;&lt;/p&gt;
</description>
			<pubDate>Thu, 17 Sep 2026 21:05:24 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Platforms_Talk:AlmaLinux/Update_procedure</comments>
		</item>
		<item>
			<title>Project:THE skin/mybarrio.theme rendering dynamics</title>
			<link>https://kb.costasano.club/index.php?title=Project:THE_skin/mybarrio.theme_rendering_dynamics&amp;diff=1389&amp;oldid=1388</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:THE_skin/mybarrio.theme_rendering_dynamics&amp;diff=1389&amp;oldid=1388</guid>
			<description>&lt;p&gt;&lt;/p&gt;
</description>
			<pubDate>Thu, 17 Sep 2026 16:43:00 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:THE_skin/mybarrio.theme_rendering_dynamics</comments>
		</item>
		<item>
			<title>Project:THE skin/mybarrio.theme system dynamics</title>
			<link>https://kb.costasano.club/index.php?title=Project:THE_skin/mybarrio.theme_system_dynamics&amp;diff=1388&amp;oldid=0</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:THE_skin/mybarrio.theme_system_dynamics&amp;diff=1388&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Mngr&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Mngr (page does not exist)&quot;&gt;&lt;bdi&gt;Mngr&lt;/bdi&gt;&lt;/a&gt; moved page &lt;a href=&quot;/index.php?title=Project:THE_skin/mybarrio.theme_system_dynamics&amp;amp;redirect=no&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Project:THE skin/mybarrio.theme system dynamics (page does not exist)&quot;&gt;Project:THE skin/mybarrio.theme system dynamics&lt;/a&gt; to &lt;a href=&quot;/Project:THE_skin/mybarrio.theme_rendering_dynamics&quot; title=&quot;Project:THE skin/mybarrio.theme rendering dynamics&quot;&gt;Project:THE skin/mybarrio.theme rendering dynamics&lt;/a&gt; without leaving a redirect&lt;/p&gt;
</description>
			<pubDate>Thu, 17 Sep 2026 16:33:22 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:THE_skin/mybarrio.theme_system_dynamics</comments>
		</item>
		<item>
			<title>Project:THE skin/mybarrio.theme system dynamics</title>
			<link>https://kb.costasano.club/index.php?title=Project:THE_skin/mybarrio.theme_system_dynamics&amp;diff=1387&amp;oldid=0</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:THE_skin/mybarrio.theme_system_dynamics&amp;diff=1387&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;= Drupal Rendering Dynamics =  == How &amp;lt;code&amp;gt;mybarrio.theme&amp;lt;/code&amp;gt; Participates in Page Rendering ==  === Companion document to === &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;mybarrio.theme — Code Structure and Operation&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039; ----  = 1. Why this document exists = Understanding the individual functions in &amp;lt;code&amp;gt;mybarrio.theme&amp;lt;/code&amp;gt; is only half of the story.  To understand why the code works, it is necessary to understand &amp;#039;&amp;#039;&amp;#039;when Drupal calls those functions and what is being rendered at that momen...&amp;quot;&lt;/p&gt;
</description>
			<pubDate>Thu, 17 Sep 2026 16:32:59 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:THE_skin/mybarrio.theme_system_dynamics</comments>
		</item>
		<item>
			<title>Project:THE skin/mybarrio.theme cleaned by gemini</title>
			<link>https://kb.costasano.club/index.php?title=Project:THE_skin/mybarrio.theme_cleaned_by_gemini&amp;diff=1386&amp;oldid=1380</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:THE_skin/mybarrio.theme_cleaned_by_gemini&amp;diff=1386&amp;oldid=1380</guid>
			<description>&lt;p&gt;&lt;/p&gt;
</description>
			<pubDate>Thu, 17 Sep 2026 16:10:06 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:THE_skin/mybarrio.theme_cleaned_by_gemini</comments>
		</item>
		<item>
			<title>Project:THE skin/mybarrio.theme cleaned by gemini</title>
			<link>https://kb.costasano.club/index.php?title=Project:THE_skin/mybarrio.theme_cleaned_by_gemini&amp;diff=1380&amp;oldid=0</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:THE_skin/mybarrio.theme_cleaned_by_gemini&amp;diff=1380&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;__NOTOC__ = Drupal Theme Optimization: mybarrio.theme =  This document details the refactoring and optimization of the custom code inside the &amp;#039;&amp;#039;&amp;#039;mybarrio&amp;#039;&amp;#039;&amp;#039; theme&amp;#039;s preprocess hooks. The refactoring successfully removed approximately 100 lines of redundant and deeply nested logic, resulting in a cleaner, faster, and more maintainable codebase.  == Optimized Source Code == Place this updated code into your local &amp;lt;tt&amp;gt;mybarrio.theme&amp;lt;/tt&amp;gt; file:  &amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;...&amp;quot;&lt;/p&gt;
</description>
			<pubDate>Thu, 17 Sep 2026 15:37:12 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:THE_skin/mybarrio.theme_cleaned_by_gemini</comments>
		</item>
		<item>
			<title>Project:PubModel/Field order in forms</title>
			<link>https://kb.costasano.club/index.php?title=Project:PubModel/Field_order_in_forms&amp;diff=1379&amp;oldid=0</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:PubModel/Field_order_in_forms&amp;diff=1379&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;= Field Order =  == Purpose == This document defines the suggested standard order for fields in the Costa Sano historian-facing forms.  The objective is not to force every content type or card to have the same fields. Instead, fields should appear in a &amp;#039;&amp;#039;&amp;#039;predictable practical sequence&amp;#039;&amp;#039;&amp;#039;, so that a historian can work through a form without having to search for related information.  The two main parts of a form are:  # &amp;#039;&amp;#039;&amp;#039;Archive part&amp;#039;&amp;#039;&amp;#039; — information about the histori...&amp;quot;&lt;/p&gt;
</description>
			<pubDate>Thu, 17 Sep 2026 14:00:36 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:PubModel/Field_order_in_forms</comments>
		</item>
		<item>
			<title>Drupal:CSS/Before and after rules</title>
			<link>https://kb.costasano.club/index.php?title=Drupal:CSS/Before_and_after_rules&amp;diff=1378&amp;oldid=0</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Drupal:CSS/Before_and_after_rules&amp;diff=1378&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;= CSS Pseudo-Elements — &amp;lt;code&amp;gt;::before&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;::after&amp;lt;/code&amp;gt; =  == 1. What are &amp;lt;code&amp;gt;::before&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;::after&amp;lt;/code&amp;gt;? == &amp;lt;code&amp;gt;::before&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;::after&amp;lt;/code&amp;gt; are &amp;#039;&amp;#039;&amp;#039;CSS pseudo-elements&amp;#039;&amp;#039;&amp;#039;.  They allow CSS to create an additional visual element without adding another HTML element to the Twig or HTML structure.  A useful mental model is:  &amp;lt;code&amp;gt;HTML / Twig element         │         ├── ::before         │         └── ::after&amp;lt;/c...&amp;quot;&lt;/p&gt;
</description>
			<pubDate>Thu, 17 Sep 2026 13:11:58 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Drupal_Talk:CSS/Before_and_after_rules</comments>
		</item>
		<item>
			<title>Project:PresModel/Historical-card vs Histocard - why?</title>
			<link>https://kb.costasano.club/index.php?title=Project:PresModel/Historical-card_vs_Histocard_-_why%3F&amp;diff=1377&amp;oldid=0</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:PresModel/Historical-card_vs_Histocard_-_why%3F&amp;diff=1377&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;= HistoricalCard vs HistoCard = Although &amp;#039;&amp;#039;&amp;#039;HistoricalCard&amp;#039;&amp;#039;&amp;#039; and &amp;#039;&amp;#039;&amp;#039;HistoCard&amp;#039;&amp;#039;&amp;#039; are visually related, they have different purposes and are used in different parts of the virtual museum.  == HistoricalCard == &amp;#039;&amp;#039;&amp;#039;Purpose:&amp;#039;&amp;#039;&amp;#039;  To introduce and provide access to a &amp;#039;&amp;#039;&amp;#039;subchapter&amp;#039;&amp;#039;&amp;#039;.  &amp;#039;&amp;#039;&amp;#039;Placement:&amp;#039;&amp;#039;&amp;#039;  Used on &amp;#039;&amp;#039;&amp;#039;Chapter pages&amp;#039;&amp;#039;&amp;#039; to present the available subchapters (the &amp;quot;rooms&amp;quot; of the virtual museum).  &amp;#039;&amp;#039;&amp;#039;Link behaviour:&amp;#039;&amp;#039;&amp;#039;  The complete card acts as an entrance to the subc...&amp;quot;&lt;/p&gt;
</description>
			<pubDate>Thu, 17 Sep 2026 09:52:48 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:PresModel/Historical-card_vs_Histocard_-_why%3F</comments>
		</item>
		<item>
			<title>Project:PubModel/Timeline presentation from matrix</title>
			<link>https://kb.costasano.club/index.php?title=Project:PubModel/Timeline_presentation_from_matrix&amp;diff=1376&amp;oldid=1375</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:PubModel/Timeline_presentation_from_matrix&amp;diff=1376&amp;oldid=1375</guid>
			<description>&lt;p&gt;&lt;/p&gt;
</description>
			<pubDate>Mon, 14 Sep 2026 08:50:01 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:PubModel/Timeline_presentation_from_matrix</comments>
		</item>
		<item>
			<title>Project:PubModel/Timeline presentation from matrix</title>
			<link>https://kb.costasano.club/index.php?title=Project:PubModel/Timeline_presentation_from_matrix&amp;diff=1375&amp;oldid=0</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:PubModel/Timeline_presentation_from_matrix&amp;diff=1375&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt; = Drupal: Rendering a Timeline from a Matrix (Replacing Views Templates) =  This document explains how to reproduce the two‑template rendering structure normally provided by Drupal Views when your data comes from a matrix (array) passed through a theme preprocess function.  It documents the architectural idea, the preprocess step, the wrapper Twig, and the per‑item Twig, using MediaWiki source formatting.  == 1. Problem Overview == When using Dru...&amp;quot;&lt;/p&gt;
</description>
			<pubDate>Mon, 14 Sep 2026 08:49:38 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:PubModel/Timeline_presentation_from_matrix</comments>
		</item>
		<item>
			<title>Project:PresModel/Pointer and WayPointerCard implementation reference</title>
			<link>https://kb.costasano.club/index.php?title=Project:PresModel/Pointer_and_WayPointerCard_implementation_reference&amp;diff=1374&amp;oldid=1373</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:PresModel/Pointer_and_WayPointerCard_implementation_reference&amp;diff=1374&amp;oldid=1373</guid>
			<description>&lt;p&gt;&lt;/p&gt;
</description>
			<pubDate>Sun, 13 Sep 2026 16:05:01 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:PresModel/Pointer_and_WayPointerCard_implementation_reference</comments>
		</item>
		<item>
			<title>Project:PresModel/Pointer and WayPointerCard implementation reference</title>
			<link>https://kb.costasano.club/index.php?title=Project:PresModel/Pointer_and_WayPointerCard_implementation_reference&amp;diff=1373&amp;oldid=0</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:PresModel/Pointer_and_WayPointerCard_implementation_reference&amp;diff=1373&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;= Costa Sano — PointerCard and WayPointerCard Implementation Reference =  == 1. Purpose of this document == This document records the implementation of the Costa Sano &amp;#039;&amp;#039;&amp;#039;PointerCard&amp;#039;&amp;#039;&amp;#039; and the new &amp;#039;&amp;#039;&amp;#039;WayPointerCard&amp;#039;&amp;#039;&amp;#039; mechanism as it currently exists.  The purpose is to make the implementation reproducible later without having to reconstruct the solution from old conversations and experiments.  In particular, this document records:  * the conceptual role of PointerCard...&amp;quot;&lt;/p&gt;
</description>
			<pubDate>Sun, 13 Sep 2026 16:03:00 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:PresModel/Pointer_and_WayPointerCard_implementation_reference</comments>
		</item>
		<item>
			<title>Project:PresModel/Extended ULC design proposal</title>
			<link>https://kb.costasano.club/index.php?title=Project:PresModel/Extended_ULC_design_proposal&amp;diff=1372&amp;oldid=0</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:PresModel/Extended_ULC_design_proposal&amp;diff=1372&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;= Extended Universal Link Card — Final Solution Principles =  == Purpose ==  The Extended Universal Link Card (E-ULC) extends the existing Universal Link Card (ULC) so that the same content element can handle either:  * a single selected storypage, using the existing PointerCard presentation; or * multiple selected storypages, using a WayPointCard signpost presentation.  The objective is to keep the historian&amp;#039;s content-entry experience simple while allowing the present...&amp;quot;&lt;/p&gt;
</description>
			<pubDate>Sat, 12 Sep 2026 11:42:36 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:PresModel/Extended_ULC_design_proposal</comments>
		</item>
		<item>
			<title>Project:PresModel/WayPointerCard approach</title>
			<link>https://kb.costasano.club/index.php?title=Project:PresModel/WayPointerCard_approach&amp;diff=1371&amp;oldid=0</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:PresModel/WayPointerCard_approach&amp;diff=1371&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Mngr&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Mngr (page does not exist)&quot;&gt;&lt;bdi&gt;Mngr&lt;/bdi&gt;&lt;/a&gt; moved page &lt;a href=&quot;/index.php?title=Project:PresModel/WayPointerCard_approach&amp;amp;redirect=no&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Project:PresModel/WayPointerCard approach (page does not exist)&quot;&gt;Project:PresModel/WayPointerCard approach&lt;/a&gt; to &lt;a href=&quot;/Project:PresModel/WayPointerCard_design_proposal&quot; title=&quot;Project:PresModel/WayPointerCard design proposal&quot;&gt;Project:PresModel/WayPointerCard design proposal&lt;/a&gt; without leaving a redirect&lt;/p&gt;
</description>
			<pubDate>Thu, 10 Sep 2026 14:42:22 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:PresModel/WayPointerCard_approach</comments>
		</item>
		<item>
			<title>Project:PresModel/WayAheadCard approach</title>
			<link>https://kb.costasano.club/index.php?title=Project:PresModel/WayAheadCard_approach&amp;diff=1369&amp;oldid=1367</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:PresModel/WayAheadCard_approach&amp;diff=1369&amp;oldid=1367</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Mngr&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Mngr (page does not exist)&quot;&gt;&lt;bdi&gt;Mngr&lt;/bdi&gt;&lt;/a&gt; moved page &lt;a href=&quot;/index.php?title=Project:PresModel/WayAheadCard_approach&amp;amp;redirect=no&quot; class=&quot;mw-redirect&quot; title=&quot;Project:PresModel/WayAheadCard approach&quot;&gt;Project:PresModel/WayAheadCard approach&lt;/a&gt; to &lt;a href=&quot;/index.php?title=Project:PresModel/WayPointerCard_approach&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Project:PresModel/WayPointerCard approach (page does not exist)&quot;&gt;Project:PresModel/WayPointerCard approach&lt;/a&gt;&lt;/p&gt;
</description>
			<pubDate>Thu, 10 Sep 2026 14:41:47 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:PresModel/WayAheadCard_approach</comments>
		</item>
		<item>
			<title>Project:PresModel/WayAheadCard approach</title>
			<link>https://kb.costasano.club/index.php?title=Project:PresModel/WayAheadCard_approach&amp;diff=1367&amp;oldid=0</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:PresModel/WayAheadCard_approach&amp;diff=1367&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot; = WayPointerCard — Planning and Design Decisions =  == Purpose == The &amp;#039;&amp;#039;&amp;#039;WayPointerCard&amp;#039;&amp;#039;&amp;#039; is a multi-destination navigation card.  It is intended for situations where the author wants to offer several possible directions for continuing the exploration of the current Storypage or topic.  It is &amp;#039;&amp;#039;&amp;#039;not a replacement for the PointerCard&amp;#039;&amp;#039;&amp;#039;.  A &amp;#039;&amp;#039;&amp;#039;PointerCard&amp;#039;&amp;#039;&amp;#039; points to one destination and is useful as an individual navigation element somewhere in a page.  A &amp;#039;&amp;#039;&amp;#039;WayPoint...&amp;quot;&lt;/p&gt;
</description>
			<pubDate>Thu, 10 Sep 2026 14:37:01 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:PresModel/WayAheadCard_approach</comments>
		</item>
		<item>
			<title>Project:PresModel/TimeLineCard</title>
			<link>https://kb.costasano.club/index.php?title=Project:PresModel/TimeLineCard&amp;diff=1366&amp;oldid=0</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:PresModel/TimeLineCard&amp;diff=1366&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot; = Generic Timeline / Sequence-Link Card =  == Design decisions and intended uses ==  === 1. Purpose === The &amp;#039;&amp;#039;&amp;#039;Generic Timeline / Sequence-Link Card&amp;#039;&amp;#039;&amp;#039; is a reusable card for presenting a sequence of clickable links to other storypages.  The card itself does &amp;#039;&amp;#039;&amp;#039;not&amp;#039;&amp;#039;&amp;#039; determine what the sequence represents.  It can therefore be used as:  * a chronological timeline of events; * a visual sequence of storypages; * a link tree/navigation sequence; * a sequence of chapters,...&amp;quot;&lt;/p&gt;
</description>
			<pubDate>Thu, 10 Sep 2026 09:26:24 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:PresModel/TimeLineCard</comments>
		</item>
		<item>
			<title>Project:PresModel/FloatPicStoryBox</title>
			<link>https://kb.costasano.club/index.php?title=Project:PresModel/FloatPicStoryBox&amp;diff=1365&amp;oldid=1361</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:PresModel/FloatPicStoryBox&amp;diff=1365&amp;oldid=1361</guid>
			<description>&lt;p&gt;&lt;/p&gt;
</description>
			<pubDate>Tue, 08 Sep 2026 09:38:54 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:PresModel/FloatPicStoryBox</comments>
		</item>
		<item>
			<title>Project:PresModel/FloatPicStoryBox</title>
			<link>https://kb.costasano.club/index.php?title=Project:PresModel/FloatPicStoryBox&amp;diff=1361&amp;oldid=0</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:PresModel/FloatPicStoryBox&amp;diff=1361&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;__NOTOC__ = Positioning an Image at the Bottom-Right of a Text Block with Text Wrap =  This article details how to position a thumbnail image at the bottom-right corner of a text block inside a Paragraph type in &amp;#039;&amp;#039;&amp;#039;Drupal 11.4&amp;#039;&amp;#039;&amp;#039;, allowing the body text to wrap fluidly around it.  == Overview == Standard CSS &amp;lt;code style=&amp;quot;color: #c7254e;&amp;quot;&amp;gt;float: right;&amp;lt;/code&amp;gt; naturally aligns elements to the top-right of a text container. To force an element to the bottom-right while pres...&amp;quot;&lt;/p&gt;
</description>
			<pubDate>Tue, 08 Sep 2026 09:15:55 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:PresModel/FloatPicStoryBox</comments>
		</item>
		<item>
			<title>Drupal:Content Types/Asset/Admin architecture</title>
			<link>https://kb.costasano.club/index.php?title=Drupal:Content_Types/Asset/Admin_architecture&amp;diff=1360&amp;oldid=0</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Drupal:Content_Types/Asset/Admin_architecture&amp;diff=1360&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot; = Assets View — Architecture Note =  == Purpose == The &amp;#039;&amp;#039;&amp;#039;Assets View&amp;#039;&amp;#039;&amp;#039; is the central administrative view for the project&amp;#039;s Asset entities. Assets form the reusable layer connecting archive content to Drupal Media and are therefore a key point for both normal content management and technical maintenance.  == View structure == The existing Assets View remains the &amp;#039;&amp;#039;&amp;#039;Ops&amp;#039;&amp;#039;&amp;#039; view used for normal content-management tasks.  A second &amp;#039;&amp;#039;&amp;#039;Admin display&amp;#039;&amp;#039;&amp;#039; will be created wi...&amp;quot;&lt;/p&gt;
</description>
			<pubDate>Sat, 05 Sep 2026 19:28:29 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Drupal_Talk:Content_Types/Asset/Admin_architecture</comments>
		</item>
		<item>
			<title>Drupal:Paragraphs/MapCard</title>
			<link>https://kb.costasano.club/Drupal:Paragraphs/MapCard</link>
			<guid isPermaLink="false">https://kb.costasano.club/Drupal:Paragraphs/MapCard</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Mngr&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Mngr (page does not exist)&quot;&gt;&lt;bdi&gt;Mngr&lt;/bdi&gt;&lt;/a&gt; deleted page &lt;a href=&quot;/index.php?title=Drupal:Paragraphs/MapCard&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Drupal:Paragraphs/MapCard (page does not exist)&quot;&gt;Drupal:Paragraphs/MapCard&lt;/a&gt; content was: &amp;quot;= MapCard =  This page documents the component-driven, single-asset architecture for the Heritage Map Card system in Drupal 11.  === System Architecture Overview === * &amp;#039;&amp;#039;&amp;#039;Design Strategy:&amp;#039;&amp;#039;&amp;#039; Decoupled component-driven development (KISS method). * &amp;#039;&amp;#039;&amp;#039;Asset Management:&amp;#039;&amp;#039;&amp;#039; One high-resolution image asset serves both the 4:3 cropped card view and the fullscreen interactive zoom popup windo...&amp;quot;, and the only contributor was &amp;quot;&lt;a href=&quot;/Special:Contributions/Mngr&quot; title=&quot;Special:Contributions/Mngr&quot;&gt;Mngr&lt;/a&gt;&amp;quot; (&lt;a href=&quot;/index.php?title=User_talk:Mngr&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User talk:Mngr (page does not exist)&quot;&gt;talk&lt;/a&gt;)&lt;/p&gt;
</description>
			<pubDate>Sat, 05 Sep 2026 15:16:17 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Drupal_Talk:Paragraphs/MapCard</comments>
		</item>
		<item>
			<title>Drupal:C-Modules/flipbook solution pdf.js</title>
			<link>https://kb.costasano.club/Drupal:C-Modules/flipbook_solution_pdf.js</link>
			<guid isPermaLink="false">https://kb.costasano.club/Drupal:C-Modules/flipbook_solution_pdf.js</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/index.php?title=User:Mngr&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Mngr (page does not exist)&quot;&gt;&lt;bdi&gt;Mngr&lt;/bdi&gt;&lt;/a&gt; deleted page &lt;a href=&quot;/index.php?title=Drupal:C-Modules/flipbook_solution_pdf.js&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Drupal:C-Modules/flipbook solution pdf.js (page does not exist)&quot;&gt;Drupal:C-Modules/flipbook solution pdf.js&lt;/a&gt; content was: &amp;quot;= Drupal 11.3 + Bootstrap 5 Full-Screen Flipbook Card =  This document details the production-ready architecture for our heritage platform&amp;#039;s PDF viewer. The system utilizes a standard Bootstrap 5 card component within a responsive grid layout. Clicking the card triggers a performance-optimized, full-screen interactive flipbook overlay without causing a browser page reload.  == Performa...&amp;quot;, and the only contributor was &amp;quot;&lt;a href=&quot;/Special:Contributions/Mngr&quot; title=&quot;Special:Contributions/Mngr&quot;&gt;Mngr&lt;/a&gt;&amp;quot; (&lt;a href=&quot;/index.php?title=User_talk:Mngr&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User talk:Mngr (page does not exist)&quot;&gt;talk&lt;/a&gt;)&lt;/p&gt;
</description>
			<pubDate>Sat, 05 Sep 2026 15:14:54 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Drupal_Talk:C-Modules/flipbook_solution_pdf.js</comments>
		</item>
		<item>
			<title>Maintenance:PC hardware/chinese bios</title>
			<link>https://kb.costasano.club/index.php?title=Maintenance:PC_hardware/chinese_bios&amp;diff=1359&amp;oldid=0</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Maintenance:PC_hardware/chinese_bios&amp;diff=1359&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;= AMI / Chinese Mini‑PC BIOS Access Keys = This page summarizes the most common keyboard keys used to enter the BIOS on AMI‑based and China‑OEM mini‑PC motherboards. These systems often use non‑standard or undocumented key mappings, so multiple attempts may be required. ----  == 1. Standard AMI BIOS Keys ==  * &amp;#039;&amp;#039;&amp;#039;DEL&amp;#039;&amp;#039;&amp;#039; — Primary AMI BIOS entry key * &amp;#039;&amp;#039;&amp;#039;ESC&amp;#039;&amp;#039;&amp;#039; — Alternate entry key on some AMI variants * &amp;#039;&amp;#039;&amp;#039;F2&amp;#039;&amp;#039;&amp;#039; — Common on laptops and compact systems  T...&amp;quot;&lt;/p&gt;
</description>
			<pubDate>Sat, 05 Sep 2026 08:29:33 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Maintenance_Talk:PC_hardware/chinese_bios</comments>
		</item>
		<item>
			<title>Maintenance:PC hardware</title>
			<link>https://kb.costasano.club/index.php?title=Maintenance:PC_hardware&amp;diff=1358&amp;oldid=0</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Maintenance:PC_hardware&amp;diff=1358&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;&amp;lt;nowiki&amp;gt;= PC Hardware maintenance =&amp;lt;/nowiki&amp;gt;&amp;quot;&lt;/p&gt;
</description>
			<pubDate>Sat, 05 Sep 2026 08:28:30 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Maintenance_Talk:PC_hardware</comments>
		</item>
		<item>
			<title>Project:PresModel/HistoCard</title>
			<link>https://kb.costasano.club/index.php?title=Project:PresModel/HistoCard&amp;diff=1357&amp;oldid=0</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:PresModel/HistoCard&amp;diff=1357&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot; = histocard — Mature Pattern =  == Purpose == &amp;lt;code&amp;gt;histocard&amp;lt;/code&amp;gt; is the Historical Card used to present a historical image with an overlay title and text, following the shared Costa Sano card skin.  It is designed for normal Storypage use and follows the common visual and interaction standards established for the card family.  == Shared Card Skin == &amp;lt;code&amp;gt;histocard&amp;lt;/code&amp;gt; uses the same basic skin as the other Costa Sano cards:  * consistent card proportions and vi...&amp;quot;&lt;/p&gt;
</description>
			<pubDate>Fri, 04 Sep 2026 14:38:02 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:PresModel/HistoCard</comments>
		</item>
		<item>
			<title>Project:PresModel/Remote VideoCard</title>
			<link>https://kb.costasano.club/index.php?title=Project:PresModel/Remote_VideoCard&amp;diff=1356&amp;oldid=1355</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:PresModel/Remote_VideoCard&amp;diff=1356&amp;oldid=1355</guid>
			<description>&lt;p&gt;&lt;/p&gt;
</description>
			<pubDate>Wed, 02 Sep 2026 21:46:44 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:PresModel/Remote_VideoCard</comments>
		</item>
		<item>
			<title>Project:PresModel/Remote VideoCard</title>
			<link>https://kb.costasano.club/index.php?title=Project:PresModel/Remote_VideoCard&amp;diff=1355&amp;oldid=0</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:PresModel/Remote_VideoCard&amp;diff=1355&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;= VideoCard Paragraph Type (Drupal 11.4) = This page documents how to create a Paragraph type (card) that displays a Vimeo Remote video using Drupal’s Media system.  == Overview == Drupal 11 supports Vimeo through the Remote video media type (oEmbed). A paragraph can display this media simply by rendering the media reference field.  == Requirements == * Drupal 11.4 * Media module enabled * Remote video media type available * Vimeo media item already created  == Paragra...&amp;quot;&lt;/p&gt;
</description>
			<pubDate>Wed, 02 Sep 2026 21:42:50 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:PresModel/Remote_VideoCard</comments>
		</item>
		<item>
			<title>Project:PresModel/MediaCard</title>
			<link>https://kb.costasano.club/index.php?title=Project:PresModel/MediaCard&amp;diff=1354&amp;oldid=1353</link>
			<guid isPermaLink="false">https://kb.costasano.club/index.php?title=Project:PresModel/MediaCard&amp;diff=1354&amp;oldid=1353</guid>
			<description>&lt;p&gt;&lt;/p&gt;
</description>
			<pubDate>Wed, 02 Sep 2026 14:47:05 GMT</pubDate>
			<dc:creator>Mngr</dc:creator>
			<comments>https://kb.costasano.club/Project_Talk:PresModel/MediaCard</comments>
		</item>
</channel></rss>