@import url('https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,500;9..144,600&family=Inter:wght@400;500;600&display=swap');
.wsh-hero{
position:relative;
width:100vw;
left:50%;
right:50%;
margin-left:-50vw;
margin-right:-50vw;
margin-top:-60px;
overflow:hidden;
display:flex;
flex-direction:column;
justify-content:flex-start;
min-height:460px;
font-family:'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
background:linear-gradient(120deg, #0A1F3D 0%, #123A63 45%, #1C5C8A 100%);
}
.wsh-hero::after{
content:"";
position:absolute;
inset:0;
background:linear-gradient(0deg, rgba(6,14,28,.92) 0%, rgba(6,14,28,.45) 55%, rgba(6,14,28,.08) 100%);
pointer-events:none;
}
.wsh-hero__inner{
position:relative;
z-index:2;
width:100%;
max-width:100%;
margin:0;
padding:95px 90px 48px;
box-sizing:border-box;
}
.wsh-hero__eyebrow{
display:inline-block;
font-size:12px;
letter-spacing:.12em;
text-transform:uppercase;
color:#8FC2E8 !important;
margin:0 0 14px;
font-weight:600;
}
.wsh-hero__title{
font-family:'Fraunces', Georgia, serif !important;
font-size:38px;
line-height:1.2;
font-weight:600;
font-optical-sizing:auto;
color:#FFFFFF !important;
margin:0 0 16px;
letter-spacing:-0.01em;
max-width:760px;
}
.wsh-logos{
position:relative;
z-index:2;
border-top:1px solid rgba(255,255,255,.14);
background:rgba(4,10,20,.35);
}
.wsh-logos__inner{
width:100%;
margin:0;
padding:18px 40px 22px;
box-sizing:border-box;
}
.wsh-logos__label{
font-size:10.5px;
letter-spacing:.14em;
text-transform:uppercase;
color:rgba(255,255,255,.45);
margin:0 0 12px;
font-weight:600;
}
.wsh-logos__wrap{
position:relative;
}
.wsh-logos__wrap::before,
.wsh-logos__wrap::after{
content:"";
position:absolute;
top:0;
bottom:0;
width:90px;
z-index:2;
pointer-events:none;
}
.wsh-logos__wrap::before{
left:0;
background:linear-gradient(90deg, #0E2038 0%, rgba(14,32,56,0) 100%);
}
.wsh-logos__wrap::after{
right:0;
background:linear-gradient(270deg, #0E2038 0%, rgba(14,32,56,0) 100%);
}
.wsh-logos__row{
display:flex;
overflow:hidden;
padding:9px 0;
}
.wsh-logos__track{
display:flex;
align-items:center;
gap:48px;
flex-shrink:0;
animation:wsh-scroll-left 42s linear infinite;
padding-right:48px;
}
.wsh-logos__row--reverse .wsh-logos__track{
animation-name:wsh-scroll-right;
animation-duration:37s;
}
.wsh-logos__wrap:hover .wsh-logos__track{
animation-play-state:paused;
}
@keyframes wsh-scroll-left{
from{transform:translateX(0);}
to{transform:translateX(-50%);}
}
@keyframes wsh-scroll-right{
from{transform:translateX(-50%);}
to{transform:translateX(0);}
}
/* Monochrome on the dark ground: no pill, no white box, no shadow. */
.wsh-logo{
display:flex;
align-items:center;
justify-content:center;
height:46px;
padding:0 22px;
flex-shrink:0;
background:transparent;
border-radius:0;
}
.wsh-logo img{
height:62%;
width:auto;
max-width:150px;
object-fit:contain;
display:block;
filter:grayscale(1) invert(1) brightness(1.35);
mix-blend-mode:screen;
opacity:.7;
transition:opacity .25s ease;
}
.wsh-logo:hover img{
opacity:1;
}
.wsh-logo--text span{
display:block;
font-family:'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
font-size:13px;
font-weight:600;
letter-spacing:.02em;
white-space:nowrap;
color:#9CA3AF;
transition:color .25s ease;
}
.wsh-logo--text:hover span{
color:#E5E7EB;
}
@media (max-width:640px){
.wsh-hero{min-height:340px;}
.wsh-hero__inner{padding:0 20px 30px;}
.wsh-hero__title{font-size:26px;}
.wsh-logos__inner{padding:12px 20px 16px;}
.wsh-logo{height:32px; padding:0 14px;}
.wsh-logo--text span{font-size:11px;}
.wsh-logos__track{gap:28px; padding-right:28px;}
.wsh-logos__wrap::before,.wsh-logos__wrap::after{width:40px;}
}
@media (prefers-reduced-motion: reduce){
.wsh-logos__track{animation:none;}
}
Selected funds exclusively dedicated to Wealth Managers and Family Offices
OpenList — Active ETFs
Fund managers on the OpenList
Aquila Asset Management



H2O AM

Natixis

Aquila Asset Management



H2O AM

Natixis



Prosper Funds






Prosper Funds




function wspExportText(value) { var d = document.createElement('div'); d.innerHTML = value == null ? '' : String(value); return d.textContent.replace(/\s+/g, ' ').trim(); }
$(document).ready(function() {
/* Sorting (2026-09-04). Numeric columns sort by value with empty cells LAST
in both directions; the stock "num" type puts empties first ascending. A
benchmark row must never be separated from its fund by a sort, so the
orderable columns take their sort key through 'wsp-pair': a tr.bmk row
sorts on the value of the tr.fund row before it. DataTables breaks ties on
the original row index in both directions, so the fund stays first. */
$.fn.dataTable.ext.type.order['wsp-num-pre'] = function (d) {
var t = (d == null ? '' : String(d)).replace(/]*>/g, '').replace(/[%,\s]/g, '');
if (!t) { return null; }
var m = /^(\d{2})\.(\d{2})\.(\d{4})$/.exec(t);
if (m) { return parseFloat(m[3] + m[2] + m[1]); }
var n = parseFloat(t);
return isNaN(n) ? null : n;
};
$.fn.dataTable.ext.type.order['wsp-num-asc'] = function (a, b) {
if (a === null) { return b === null ? 0 : 1; }
if (b === null) { return -1; }
return a - b;
};
$.fn.dataTable.ext.type.order['wsp-num-desc'] = function (a, b) {
if (a === null) { return b === null ? 0 : 1; }
if (b === null) { return -1; }
return b - a;
};
$.fn.dataTable.ext.order['wsp-pair'] = function (settings, col) {
var last = '';
return this.api().column(col, {order: 'index'}).nodes().map(function (td) {
var tr = td.parentNode;
var text = $(td).text();
if (tr && (' ' + tr.className + ' ').indexOf(' bmk ') !== -1) { return last; }
last = text;
return text;
});
};
var table = $('#example').DataTable({
ordering: true,
order: [],
scrollX: true,
scrollCollapse: true,
paging: false,
bInfo:false,
fixedColumns: {
leftColumns: 10
},
"columnDefs": [
{
"targets": [ 0 ],
"visible": false,
"searchable": true
},
{
"targets": [ 1 ],
"visible": false,
"searchable": true
},{
"targets": [ 2 ],
"visible": false,
"searchable": true
},
{
"targets": [ 3 ],
"visible": false,
"searchable": true
},
{
"targets": [ 4 ],
"visible": false,
"searchable": true
},
{
"targets": [ 5 ],
"visible": false,
"searchable": true
},
{"targets": [0, 1, 2, 3, 4, 5], "orderable": false},
{"targets": [6, 7, 8, 11, 13, 16, 17, 18], "className": "wsp-col-text", "orderable": false},
{"targets": [9], "className": "wsp-col-text wsp-col-name", "orderable": true, "orderDataType": "wsp-pair", "type": "string"},
{"targets": [10], "className": "wsp-col-text wsp-col-isin", "orderable": false},
{"targets": [12, 14, 15, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31], "className": "wsp-col-num", "orderable": true, "orderDataType": "wsp-pair", "type": "wsp-num"},
{"targets": [32, 33], "className": "wsp-col-text wsp-col-docs", "orderable": false}
],
dom: 'frtip',
buttons: [
{extend: 'copy', className:'tableButtons',exportOptions: {columns: [6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33], rows: function (idx, data, node) { if ((' ' + node.className + ' ').indexOf(' bmk ') === -1) { return true; } for (var i = 6; i < data.length; i++) { if (wspExportText(data[i])) { return true; } } return false; }, format: {body: function (data, row, column, node) { var a = node && node.querySelector ? node.querySelector('a') : null; return a && a.href ? a.href : wspExportText(data); }}}},
{extend: 'csv', className: 'tableButtons',title: 'Data Export',exportOptions: {columns: [6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33], rows: function (idx, data, node) { if ((' ' + node.className + ' ').indexOf(' bmk ') === -1) { return true; } for (var i = 6; i < data.length; i++) { if (wspExportText(data[i])) { return true; } } return false; }, format: {body: function (data, row, column, node) { var a = node && node.querySelector ? node.querySelector('a') : null; return a && a.href ? a.href : wspExportText(data); }}}},
{extend: 'excel', className: 'tableButtons', title: 'Data Export',exportOptions: {columns: [6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33], rows: function (idx, data, node) { if ((' ' + node.className + ' ').indexOf(' bmk ') === -1) { return true; } for (var i = 6; i < data.length; i++) { if (wspExportText(data[i])) { return true; } } return false; }, format: {body: function (data, row, column, node) { var a = node && node.querySelector ? node.querySelector('a') : null; return a && a.href ? a.href : wspExportText(data); }}}},
{extend: 'print', className:'tableButtons',exportOptions: {columns: [6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33], rows: function (idx, data, node) { if ((' ' + node.className + ' ').indexOf(' bmk ') === -1) { return true; } for (var i = 6; i < data.length; i++) { if (wspExportText(data[i])) { return true; } } return false; }, format: {body: function (data, row, column, node) { var a = node && node.querySelector ? node.querySelector('a') : null; return a && a.href ? a.href : wspExportText(data); }}}}
],
initComplete: function () {
this.api().columns([3]).every( function () {
var column = this;
var select = $("#acFltr");
column.data().unique().sort().each( function ( d, j ) {
select.append( ''+d+'' )
} );
} );
this.api().columns([4]).every( function () {
var column = this;
var select = $("#stFltr");
column.data().unique().sort().each( function ( d, j ) {
select.append( ''+d+'' )
} );
} );
$('.multipleSelect').fastselect();
$('body').find('.dataTables_scrollBody').addClass("scrollbar");
/* dom is 'frtip': Buttons initialises from the option above but
DataTables places no container, so it goes into the toolbar's
right-hand slot (2026-09-04). */
this.api().buttons().container().appendTo($('.wsp-ol-toolbar__exports'));
}
});
/* Horizontal-scroll affordance (2026-09-04). The stylesheet keeps the bar
visible; this adds .wsp-ol-scroll--more to .dataTables_scroll while
content remains to the right, which the stylesheet renders as a fade.
Re-evaluated on scroll, resize and every draw (filters change the width). */
var wspScrollBody = $('#example').closest('.dataTables_wrapper').find('.dataTables_scrollBody');
function wspScrollFade() {
var el = wspScrollBody.get(0);
if (!el) { return; }
var more = el.scrollLeft + el.clientWidth < el.scrollWidth - 1;
wspScrollBody.closest('.dataTables_scroll').toggleClass('wsp-ol-scroll--more', more);
}
wspScrollBody.on('scroll', wspScrollFade);
$(window).on('resize', wspScrollFade);
table.on('draw', wspScrollFade);
wspScrollFade();
/* Toggle state is a CSS class (2026-09-04), never an inline colour. */
function wspToggle(active, inactive) {
$(active).removeClass('wsp-toggle--inactive').addClass('wsp-toggle--active');
$(inactive).removeClass('wsp-toggle--active').addClass('wsp-toggle--inactive');
}
/* Hover in step across the frozen clone (2026-09-04). FixedColumns renders
the frozen columns as a second table, so a CSS :hover lights only the
half the pointer is over. Both halves carry the same rows in the same
order, so the row under the pointer and its counterpart share one class. */
$('#example').closest('.dataTables_wrapper').on('mouseenter mouseleave', 'tbody tr', function (event) {
var index = $(this).index();
$(this).closest('.dataTables_wrapper')
.find('.dataTables_scrollBody table tbody tr, .DTFC_LeftBodyLiner table tbody tr')
.filter(function () { return $(this).index() === index; })
.toggleClass('wsp-hover', event.type === 'mouseenter');
});
$('#acFltr').on('change', function(){
var search = [];
$.each($('#acFltr option:selected'), function(){
search.push($(this).val());
});
search = search.join('|');
table.column(3).search(search, true, false).draw();
table.fixedColumns().update();
});
$('#stFltr').on('change', function(){
var search = [];
$.each($('#stFltr option:selected'), function(){
search.push($(this).val());
});
search = search.join('|');
if (search.length != 0) {
table.column(4).search('^' + search + '$' , true, false).draw();
} else {
table.column(4).search(search , true, false).draw();
}
table.fixedColumns().update();
});
$('#myInput').on( 'keyup', function () {
table.column(0).search( this.value ).draw();
} );
var state_qualified = "unclicked";
var state_nonqualified = "unclicked";
$('#qualified').on( 'click', function () {
if (state_qualified == "unclicked") {
table.column( 1 ).search( "", true, false, true );
table.draw();
wspToggle(this, '#nonqualified');
$(this).html(' All');
$('#nonqualified').html('CH Registered Only');
state_qualified = "clicked";
state_nonqualified = "unclicked";
} else {
}
table.fixedColumns().update();
table.draw();
});
$('#nonqualified').on( 'click', function () {
if (state_nonqualified=="unclicked") {
table.column( 1 ).search( "Yes", true, false, true );
table.draw();
wspToggle(this, '#qualified');
$(this).html(' CH Registered Only');
$('#qualified').html('All');
state_qualified = "unclicked";
state_nonqualified = "clicked";
} else {
}
table.fixedColumns().update();
table.draw();
} );
/* Share Class Type is a SELECTOR, not a filter (owner ruling 2026-09-04).
Every fund is ONE row; the toggle decides WHICH of its share classes the
row shows, default Clean Shares. Each tr.fund carries both classes' 34
cells, and its benchmark row's, in data-wsp-class-clean /
data-wsp-class-retail (a single-class fund carries the same class twice)
as base64 of compact UTF-8 JSON -- never as escaped JSON: the render path
entity-decodes the block once (measured 2026-09-04), which turned "
into a raw quote and cut the attribute at its first one. wspClassPayload
is the decoder; decodeURIComponent(escape(...)) makes atob's byte string
UTF-8 (M&G, the registered mark, em dashes).
The swap goes through the DataTables API -- row().data() rewrites the
cells and invalidates the row's search and sort caches -- so the column
filters, the search box, the wsp-pair sort keys, the zebra and the
Copy/CSV/Excel/Print exports all see the shown class; the current sort
order survives the redraw, and fixedColumns().update() rebuilds the
frozen clone so the left block never shows the other class. */
var wspShownClass = 'clean';
var wspPairs = (function () {
var nodes = table.rows({order: 'index'}).nodes().toArray(), pairs = [];
for (var i = 0; i < nodes.length; i++) {
if ((' ' + nodes[i].className + ' ').indexOf(' fund ') === -1) { continue; }
var next = nodes[i + 1];
var bmk = next && (' ' + next.className + ' ').indexOf(' bmk ') !== -1 ? i + 1 : null;
pairs.push([i, bmk]);
}
return pairs;
})();
function wspClassPayload(encoded) {
return JSON.parse(decodeURIComponent(escape(atob(encoded))));
}
function wspShowClass(kind) {
for (var p = 0; p < wspPairs.length; p++) {
var fundRow = table.row(wspPairs[p][0]);
var payload = fundRow.node().getAttribute('data-wsp-class-' + kind);
if (!payload) { continue; }
var shareClass = wspClassPayload(payload);
fundRow.data(shareClass.cells);
if (wspPairs[p][1] !== null) { table.row(wspPairs[p][1]).data(shareClass.bmk); }
}
wspShownClass = kind;
$('#example').attr('data-wsp-shown-class', kind);
table.draw();
table.fixedColumns().update();
}
function wspShareClassChrome() {
if (wspShownClass === 'retail') {
wspToggle('#retail', '#instit');
$('#retail').html(' Retail');
$('#instit').html('Clean Shares');
} else {
wspToggle('#instit', '#retail');
$('#instit').html(' Clean Shares');
$('#retail').html('Retail');
}
}
$('#retail').on( 'click', function () {
if (wspShownClass === 'retail') { return; }
wspShowClass('retail');
wspShareClassChrome();
});
$('#instit').on( 'click', function () {
if (wspShownClass === 'clean') { return; }
wspShowClass('clean');
wspShareClassChrome();
} );
/* Reset. Two deliberate divergences from page 5030's script, both fixing
* defects inherited from it (2026-08-28):
*
* 1. 5030 binds this handler but has NO #resetButton element, so the only
* way out of a filter state never existed. This shell emits the element
* (see _build_filter_ui) whenever any filter control is present.
* 2. The toggle handlers below guard on state_X == "unclicked", and 5030's
* reset never cleared those variables -- so after a reset a toggle could
* not be re-armed. Resetting the state and the button chrome here is what
* makes Reset actually return the table to "everything". */
$('#resetButton').click(function () {
/* Three stacked defects inherited from 5030's handler, all fixed here.
* Found by the browser pass of 2026-08-29, which saw a "reset" chip stay
* on screen and RE-APPLY its filter the moment another control was
* touched:
* 1. .attr("selected","") SELECTS rather than deselects -- an empty
* attribute value is true in HTML. .prop('selected', false) clears.
* 2. .val("") does not clear a ; .val([]) does.
* 3. fastselect renders its own widget and keeps its own model, so
* emptying the underlying leaves the chip rendered and its
* stale value re-fires on the next change event. The widget has to
* be rebuilt from the now-empty select.
* The rebuild is guarded and runs BEFORE the column searches are cleared,
* so any change event it fires cannot re-filter the table afterwards. If
* it throws, the searches below still clear: worst case a chip lingers
* visually, never a table filtered by a control the user has reset. */
/* Remove each chip through fastselect's OWN removal path. Verified
* against fastselect 0.7.3's source: it binds a delegated click on
* .fstChoiceRemove which calls removeSelectedOption, updating its
* internal model, its rendered chips and the underlying
* together -- the three things that must agree.
*
* An earlier attempt (2026-08-29, first cut) destroyed the widget and
* re-ran .fastselect() on the emptied select. That did clear the model,
* but the rebuilt widget came back UNSTYLED: /real-assets/ was left
* showing a raw clipped native after any reset. Using
* the widget's own affordance keeps it intact.
*
* Capped loop, because the collection shrinks as each chip is removed. */
for (var wspReset = 0; wspReset < 50 && $('.fstChoiceRemove').length; wspReset++) {
$('.fstChoiceRemove').first().trigger('click');
}
/* Belt and braces for any option the widget does not own. */
$(".multipleSelect").find('option').prop('selected', false);
if (document.getElementById('myInput')) { document.getElementById('myInput').value = ""; }
state_qualified = "unclicked";
state_nonqualified = "unclicked";
$('#qualified').html('All');
$('#nonqualified').html('CH Registered Only');
$('#qualified, #nonqualified').removeClass('wsp-toggle--active').addClass('wsp-toggle--inactive');
/* The share-class selector returns to its default, Clean Shares; its
chrome is only drawn when the pair is live (see _build_filter_ui). */
if (wspShownClass !== 'clean') { wspShowClass('clean'); }
if (!$('#instit').prop('disabled')) { wspShareClassChrome(); }
table
.search( '' )
.columns().search( '' )
.draw();
table.fixedColumns().update();
} );
/* 5030 auto-applies Fund Status=All and Share Class=Retail on load. This
* shell deliberately does NOT: that default searched column 2 for 'Yes', and
* on a page whose Retail column is empty it hid every row with no control
* able to clear it -- three pages served an empty table on 2026-08-24 for
* exactly this reason. The default view here is every fund; a visitor
* filters only by choosing to. The Share Class Type pair is not a filter:
* the server renders every fund's Clean Shares class and marks that button
* active, so nothing is clicked on load. */
})
/* OpenList table stylesheet. Canonical source: OPENLIST_TABLE_CSS in
utils/page_tools/openlist_vertical_content.py, emitted by the one renderer
on every list page. Edit the constant; nothing else carries a copy. */
/* --- page: one data wrapper, at most 1440px, centred ------------------- */
.wsp-ol-page { width: 100%; max-width: 1440px; margin: 0 auto; box-sizing: border-box; }
.dataTables_wrapper { max-width: 1440px; margin-left: auto; margin-right: auto; }
/* Desktop breakout (2026-09-04): the data wrapper spans min(1440px, 100vw)
centred on the viewport whatever the theme column (1090px on the
canonical pages, 1170px on the legacy three), so the seven pages share
one table width. The theme column is centred, so 50% of it minus half the
target width is the viewport-centred left edge. The phone block below
keeps its own 100vw rule and is not touched. */
@media (min-width: 481px) {
.wsp-ol-page, .dataTables_wrapper { width: min(1440px, 100vw); max-width: none; margin-left: calc(50% - min(720px, 50vw)); margin-right: 0; }
.wsp-ol-page .dataTables_wrapper { width: 100%; margin-left: 0; }
}
/* --- horizontal scroll: a visible bar and a right-edge fade -------------
The page scrolls (no scrollY box since 2026-09-04); the table's own
scrolling is horizontal only. The bar is forced visible (DataTables sets
overflow inline, hence !important) and drawn in the brand grays; the fade
sits on .dataTables_scroll, not on the scrolling element, and the shell's
JS adds .wsp-ol-scroll--more while content remains to the right. */
.dataTables_scrollBody { overflow-x: scroll !important; scrollbar-width: auto; scrollbar-color: #6B7280 #F3F4F6; }
.dataTables_scrollBody::-webkit-scrollbar { height: 12px; }
.dataTables_scrollBody::-webkit-scrollbar-track { background: #F3F4F6; }
.dataTables_scrollBody::-webkit-scrollbar-thumb { background: #6B7280; border: 2px solid #F3F4F6; border-radius: 0; }
.dataTables_scroll { position: relative; }
.dataTables_scroll::after { content: ""; position: absolute; top: 0; right: 0; bottom: 12px; width: 48px; pointer-events: none; opacity: 0; transition: opacity .2s ease; background: linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(255,255,255,.92) 100%); }
.dataTables_scroll.wsp-ol-scroll--more::after { opacity: 1; }
table.dataTable thead th {white-space: nowrap;}
table.dataTable tbody td {white-space: nowrap;}
/* --- rows: zebra, no borders, 40px, fund bold / benchmark italic -------
8px cell padding and 12px body text, on the 8px scale: measured locally
on 2026-09-04, 16px padding with 13px text widened the four frozen columns
to 1043px of the 1090px column on /real-assets/ and cut the ISIN at rest
at 1440, which the 2026-09-03 geometry evidence shows visible on all four
pages. 8px/12px keeps it visible; 24px line-height makes the row 40px. */
table.dataTable, table.dataTable.cell-border, table.dataTable.no-footer { border: 0; border-collapse: collapse; }
table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td,
table.dataTable.row-border tbody th, table.dataTable.row-border tbody td,
table.dataTable.display tbody th, table.dataTable.display tbody td,
table.dataTable tbody th, table.dataTable tbody td { border: 0; }
table.dataTable.cell-border tbody tr th:first-child, table.dataTable.cell-border tbody tr td:first-child { border-left: 0; }
table.dataTable tbody tr { height: 40px; }
table.dataTable tbody td { padding: 8px; line-height: 24px; font-size: 12px; color: #1F2937; vertical-align: middle; }
table.dataTable.display tbody tr.odd, table.dataTable.stripe tbody tr.odd { background-color: #FFFFFF; }
table.dataTable.display tbody tr.even, table.dataTable.stripe tbody tr.even { background-color: #F9F9F9; }
/* DataTables shades the sorted column's cells; the zebra owns the ground. */
table.dataTable.display tbody tr > .sorting_1, table.dataTable.display tbody tr > .sorting_2, table.dataTable.display tbody tr > .sorting_3,
table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.display tbody tr.odd > .sorting_3,
table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.display tbody tr.even > .sorting_3,
table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.display tbody tr:hover > .sorting_3,
table.dataTable.order-column tbody tr > .sorting_1, table.dataTable.order-column tbody tr > .sorting_2, table.dataTable.order-column tbody tr > .sorting_3 { background-color: transparent; }
/* Hover, in the original table and in the FixedColumns clone alike. The
canonical shell also mirrors the hovered row onto its clone with .wsp-hover;
the class is shared so one rule covers both. */
table.dataTable.display tbody tr:hover, table.dataTable.hover tbody tr:hover,
table.dataTable.display tbody tr.wsp-hover, table.dataTable.hover tbody tr.wsp-hover { background-color: #F3F4F6; }
table.dataTable tbody tr.bmk td { font-style: italic; }
table.dataTable tbody tr.fund td { font-weight: 700; }
/* --- header: 12px uppercase, 600, muted, one 2px rule ------------------ */
table.dataTable thead th, table.dataTable thead td { padding: 12px 8px; line-height: 16px; font-size: 12px; font-weight: 600; letter-spacing: 0.02em; text-transform: uppercase; color: #4B5563; background: #FFFFFF; border-bottom: 2px solid #E5E7EB; text-align: left; vertical-align: bottom; }
table.dataTable tfoot th, table.dataTable tfoot td { padding: 0; border: 0; height: 0; line-height: 0; font-size: 0; }
/* Sort indicator: a glyph, not DataTables' background images. */
table.dataTable thead .sorting, table.dataTable thead .sorting_asc, table.dataTable thead .sorting_desc,
table.dataTable thead .sorting_asc_disabled, table.dataTable thead .sorting_desc_disabled { background-image: none; }
table.dataTable thead > tr > th.sorting, table.dataTable thead > tr > th.sorting_asc, table.dataTable thead > tr > th.sorting_desc { padding-right: 24px; position: relative; cursor: pointer; }
table.dataTable thead > tr > th.sorting::after, table.dataTable thead > tr > th.sorting_asc::after, table.dataTable thead > tr > th.sorting_desc::after { position: absolute; right: 8px; bottom: 12px; font-size: 12px; line-height: 16px; font-weight: 400; }
table.dataTable thead > tr > th.sorting::after { content: "\2195"; color: #6B7280; }
table.dataTable thead > tr > th.sorting_asc::after { content: "\2191"; }
table.dataTable thead > tr > th.sorting_desc::after { content: "\2193"; }
/* --- columns: text left, figures right in tabular digits --------------- */
table.dataTable th.wsp-col-text, table.dataTable td.wsp-col-text { text-align: left; }
table.dataTable th.wsp-col-num, table.dataTable td.wsp-col-num { text-align: right; font-variant-numeric: tabular-nums; }
table.dataTable td.wsp-col-name { color: #111827; }
table.dataTable td.wsp-col-isin { color: #374151; font-variant-numeric: tabular-nums; }
table.dataTable td .wsp-pos { color: #035D41; }
table.dataTable td .wsp-neg { color: #A31A1A; }
/* LEGACY COMPAT, scoped to dt-center, which the canonical shell no longer
emits: the three hand-built Long Only shells still apply DataTables'
dt-center to targets 11-33 from their own init script. Hidden helpers 0-5
are not in the DOM, so a visible cell's nth-child position is its target
minus 5: 6=Ccy, 8=Perf Fee, 11=Liquidity, 12=UCITS, 13=CH Reg are text;
26 onward are the document columns (25 on /full-list/, which hides Max
DD). Remove with the legacy shells (backlog P6.4). */
table.dataTable th.dt-center, table.dataTable td.dt-center { text-align: right; font-variant-numeric: tabular-nums; }
table.dataTable th.dt-center:nth-child(6), table.dataTable td.dt-center:nth-child(6),
table.dataTable th.dt-center:nth-child(8), table.dataTable td.dt-center:nth-child(8),
table.dataTable th.dt-center:nth-child(11), table.dataTable td.dt-center:nth-child(11),
table.dataTable th.dt-center:nth-child(12), table.dataTable td.dt-center:nth-child(12),
table.dataTable th.dt-center:nth-child(13), table.dataTable td.dt-center:nth-child(13),
table.dataTable th.dt-center:nth-child(n+26), table.dataTable td.dt-center:nth-child(n+26) { text-align: left; font-variant-numeric: normal; }
/* --- controls: one flat toolbar row, filters left, exports right (2026-09-04)
No gray box, no shadow, no radius: one 1px #E5E7EB rule below, 16px
rhythm. Groups wrap only when the viewport cannot hold them. The export
buttons are DataTables' Buttons container, moved into __exports by the
shell's initComplete (dom is 'frtip', so DataTables does not place it). */
.wsp-ol-toolbar { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between; gap: 16px 24px; width: 100%; background: transparent; border: 0; border-bottom: 1px solid #E5E7EB; border-radius: 0; box-shadow: none; padding: 0 0 16px 0; box-sizing: border-box; margin: 0 0 16px 0; }
.wsp-ol-toolbar__filters { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 16px; }
.wsp-ol-toolbar__exports { display: flex; align-items: flex-end; margin-left: auto; }
.wsp-ol-toolbar__exports .dt-buttons { display: flex; gap: 8px; margin: 0; }
.wsp-ol-toolbar__exports button.dt-button, .wsp-ol-toolbar__exports div.dt-button, .wsp-ol-toolbar__exports a.dt-button { margin: 0; }
.wsp-ol-toolbar p.wsp-ol-label { margin: 0 0 8px 0; font-size: 12px; line-height: 16px; font-weight: 600; letter-spacing: 0.02em; text-transform: uppercase; color: #4B5563; white-space: nowrap; }
.dataTables_filter {display: none;}
.DTFC_LeftBodyLiner { overflow:hidden;}
#topbutton{background-color:rgb(236,136,14); color:white;}
/* Toggles in the brand dark blue (#0E2038, white on it 16:1). State is a
class, never an inline colour: active = dark, inactive = white with the
dark border, disabled = inactive at half opacity. */
.myButtons { height: 40px; padding: 0 12px; font-size: 13px; font-weight: 600; line-height: 38px; border-radius: 0; border: 1px solid #0E2038; background-color: #0E2038; color: #FFFFFF; cursor: pointer; box-shadow: none; white-space: nowrap; }
.myButtons.wsp-toggle--active { background-color: #0E2038; color: #FFFFFF; border-color: #0E2038; }
.myButtons.wsp-toggle--inactive { background-color: #FFFFFF; color: #0E2038; border-color: #0E2038; }
.myButtons[disabled] { cursor: not-allowed; opacity: 0.5; }
#myInput { height: 40px; width: 200px; padding: 0 12px; font-size: 13px; color: #111827; background: #FFFFFF; border: 1px solid #6B7280; border-radius: 0; box-shadow: none; box-sizing: border-box; }
/* Fixed-width selects so the seven groups and the four export buttons
share one 1440px row (measured 2026-09-04: fastselect's default 262px
widget pushed the exports onto a second line). */
.fstElement { font-size: 13px; min-height: 40px; width: 180px; max-width: 180px; border: 1px solid #6B7280; border-radius: 0; background: #FFFFFF; box-shadow: none; box-sizing: border-box; }
.fstMultipleMode .fstQueryInput { width: auto; min-width: 0; max-width: 100%; }
.fstMultipleMode .fstControls { padding: 4px 8px; }
.fstMultipleMode .fstQueryInput { font-size: 13px; }
#myInput::placeholder, .fstQueryInput::placeholder { color: #4B5563; opacity: 1; }
.fstChoiceItem { border: 1px solid #6B7280; border-radius: 0; background: #F3F4F6; color: #111827; font-size: 13px; }
.fstResultItem.fstFocused { background: #F3F4F6; color: #111827; }
.dt-buttons { margin: 0 0 8px 0; }
button.dt-button, div.dt-button, a.dt-button { height: 40px; margin: 0 8px 8px 0; padding: 0 12px; font-size: 13px; font-weight: 600; line-height: 38px; color: #111827; background: #FFFFFF; background-image: none; border: 1px solid #6B7280; border-radius: 0; box-shadow: none; }
button.dt-button:hover:not(.disabled), div.dt-button:hover:not(.disabled), a.dt-button:hover:not(.disabled),
button.dt-button:active:not(.disabled), div.dt-button:active:not(.disabled), a.dt-button:active:not(.disabled),
button.dt-button:focus:not(.disabled), div.dt-button:focus:not(.disabled), a.dt-button:focus:not(.disabled) { background: #F3F4F6; background-image: none; border-color: #4B5563; box-shadow: none; text-shadow: none; }
#empty_begin p { font-size: 13px; color: #374151; }
/* --- phone width (W4.3, measured 2026-09-03; the numbers and the harness
are in outputs/responsive_acceptance_20260903/). At 390px the theme
leaves the table a 250px column while the four frozen columns alone ran
564-913px, so the frozen block covered the whole scroll window and no
other column -- the ISIN first -- could ever come into view. No column
is removed and leftColumns stays 10. Two width rules:
1. The four visible frozen columns wrap and take a floor of 48px, 88px
for Fund Name. They are the first four cells once DataTables drops the
six hidden helpers, in the original table and in the FixedColumns
clone alike, which is why nth-child under .dataTables_wrapper reaches
both. `min-width` is what holds: `width` alone let the over-constrained
auto table collapse them to one character per line.
2. The wrapper spans the viewport instead of the padded column: with rule
1 alone the tightest readable floor still leaves a -14px window; with
the wrapper at 390px the window is 118px against a 104-113px ISIN cell.
Wrapped cells drop the 24px line-height so a wrapped row is as tall as
its lines, not 40px per line; 40px stays the floor. The export buttons
wrap instead of overhanging, and the search box stops overhanging its
panel. DataTables Responsive is not loaded on these pages. ------------ */
@media (max-width: 480px) {
.dataTables_wrapper { width: 100vw; margin-left: calc(50% - 50vw); padding: 0 4px; box-sizing: border-box; }
.dataTables_wrapper table th:nth-child(-n+4),
.dataTables_wrapper table td:nth-child(-n+4) {
white-space: normal; overflow-wrap: anywhere; line-height: 1.3;
width: 48px; min-width: 48px; max-width: 48px; padding: 4px 4px;
}
.dataTables_wrapper table th:nth-child(4),
.dataTables_wrapper table td:nth-child(4) { width: 88px; min-width: 88px; max-width: 88px; }
.dataTables_wrapper table thead > tr > th:nth-child(-n+4) { padding-right: 4px; }
.dataTables_wrapper table thead > tr > th:nth-child(-n+4)::after { right: 0; }
.dt-buttons { display: flex; flex-wrap: wrap; }
#myInput { width: 100%; max-width: 100%; box-sizing: border-box; }
}
/* --- pre-init state. WP Rocket serves the init script as
type="rocketlazyloadscript", so it does not run until the visitor
interacts with the page -- measured 2026-08-28 as 18+ seconds on
/real-assets/, during which the raw rendered unstyled with its six
hidden helper columns visible. DataTables adds .dataTable to the element
on init, so this styles exactly the pre-init state. Nothing is withheld
pending JavaScript (a "Loading" note was tried on 2026-08-28 and reverted:
if DataTables never initialises the visitor must still have the table);
the helper columns 0-5 are simply hidden so the pre-init column set
matches the real one. ------------------------------------------------ */
#example:not(.dataTable) th:nth-child(-n+6),
#example:not(.dataTable) td:nth-child(-n+6) { display: none; }
#example:not(.dataTable) { font-size:12px; width:100%; }
#example:not(.dataTable) th { color:#4B5563; font-size:13px; text-align:left; }
#example:not(.dataTable) td, #example:not(.dataTable) th { padding:4px 8px; }
Go to Top
| searchHead | Qualified | Retail | Asset Class | Geography | Strategy | Asset Class | Geography | Strategy | Fund Name | ISIN | Ccy | Mgmt Fee | Perf Fee | Inception | Size (in mio) | Liquidity | UCITS | CH Reg | 1M | 3M | 6M | YTD | 2025 | 2024 | 2023 | 1Y | 3Y | 5Y | Volatility | Sharpe R. | Max DD | WSP Report | Fund / Other Docs |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| searchHead | Qualified | Retail | Asset Class | Geography | Strategy | Asset Class | Geography | Strategy | Fund Name | ISIN | Ccy | Mgmt Fee | Perf Fee | Inception | Size (in mio) | Liquidity | UCITS | CH Reg | 1M | 3M | 6M | YTD | 2025 | 2024 | 2023 | 1Y | 3Y | 5Y | Volatility | Sharpe R. | Max DD | WSP Report | Fund / Other Docs |
| Amundi Multi-Asset Prtf Defen ETF Dist DE000ETF7029 | Yes | Mixed Allocation | Global | Dynamic Allocation | Mixed Allocation | Global | Dynamic Allocation | Amundi Multi-Asset Prtf Defen ETF Dist | DE000ETF7029 | CHF | 0.40% | No | Yes | Yes | 13.10 | 9.81 | 5.51 | 1.32 | Unavailable | Unavailable | |||||||||||||
| Amundi Multi-Asset Prtf Defen ETF Dist DE000ETF7029 | Yes | Mixed Allocation | Global | Dynamic Allocation | |||||||||||||||||||||||||||||
| Amundi Multi-Asset Prtf ETF Dist DE000ETF7011 | Yes | Mixed Allocation | Global | Dynamic Allocation | Mixed Allocation | Global | Dynamic Allocation | Amundi Multi-Asset Prtf ETF Dist | DE000ETF7011 | EUR | 0.45% | No | Yes | Yes | 18.85 | 11.81 | 7.09 | 1.22 | Unavailable | Unavailable | |||||||||||||
| Amundi Multi-Asset Prtf ETF Dist DE000ETF7011 | Yes | Mixed Allocation | Global | Dynamic Allocation | |||||||||||||||||||||||||||||
| Amundi Multi-Asset Prtf Offen ETF Dist DE000ETF7037 | Yes | Mixed Allocation | Global | Dynamic Allocation | Mixed Allocation | Global | Dynamic Allocation | Amundi Multi-Asset Prtf Offen ETF Dist | DE000ETF7037 | EUR | 0.52% | No | Yes | Yes | 23.38 | 15.03 | 9.23 | 1.27 | Unavailable | Unavailable | |||||||||||||
| Amundi Multi-Asset Prtf Offen ETF Dist DE000ETF7037 | Yes | Mixed Allocation | Global | Dynamic Allocation | |||||||||||||||||||||||||||||
| BNPP EASY II EUR Cr PAB Opps ETF €Acc IE000JBB8CR7 | Yes | Fixed Income | Europe | EUR Corporate Bonds | Fixed Income | Europe | EUR Corporate Bonds | BNPP EASY II EUR Cr PAB Opps ETF €Acc | IE000JBB8CR7 | EUR | 0.10% | No | Yes | Yes | 0.63 | 4.20 | 3.56 | 0.40 | Unavailable | Unavailable | |||||||||||||
| BNPP EASY II EUR Cr PAB Opps ETF €Acc IE000JBB8CR7 | Yes | Fixed Income | Europe | EUR Corporate Bonds | |||||||||||||||||||||||||||||
| Exane Funds 2 Exane Equity Sel Eurp ETF LU3243965780 | Equity | Europe | All Cap Blend | Equity | Europe | All Cap Blend | Exane Funds 2 Exane Equity Sel Eurp ETF | LU3243965780 | EUR | 0.65% | Yes | Yes | 20.36 | 15.21 | 10.59 | 1.13 | Unavailable | Unavailable | |||||||||||||||
| Exane Funds 2 Exane Equity Sel Eurp ETF LU3243965780 | Equity | Europe | All Cap Blend | ||||||||||||||||||||||||||||||
| Fidelity ESG USD EM Bond ETF Inc IE00BM9GRP64 | Yes | Fixed Income | EM | Hard Ccy Bonds | Fixed Income | EM | Hard Ccy Bonds | Fidelity ESG USD EM Bond ETF Inc | IE00BM9GRP64 | GBP | 0.45% | No | Yes | Yes | 5.81 | 5.43 | 6.32 | 0.57 | Unavailable | Unavailable | |||||||||||||
| Fidelity ESG USD EM Bond ETF Inc IE00BM9GRP64 | Yes | Fixed Income | EM | Hard Ccy Bonds | |||||||||||||||||||||||||||||
| Fidelity Gl Crp Bd Rsh EnhPABETFUSDInc IE00BM9GRM34 | Yes | Fixed Income | Global | Corporate Bonds | Fixed Income | Global | Corporate Bonds | Fidelity Gl Crp Bd Rsh EnhPABETFUSDInc | IE00BM9GRM34 | USD | 0.25% | No | Yes | Yes | 1.09 | 5.45 | 6.52 | 0.15 | Unavailable | Unavailable | |||||||||||||
| Fidelity Gl Crp Bd Rsh EnhPABETFUSDInc IE00BM9GRM34 | Yes | Fixed Income | Global | Corporate Bonds | |||||||||||||||||||||||||||||
| Fidelity Japan Equity Rsh Enh ETF JPYAcc IE00BNGFMX61 | Yes | Equity | Japan | Large Cap Blend | Equity | Japan | Large Cap Blend | Fidelity Japan Equity Rsh Enh ETF JPYAcc | IE00BNGFMX61 | USD | 0.30% | No | Yes | Yes | 26.12 | 18.29 | 13.83 | 1.49 | Unavailable | Unavailable | |||||||||||||
| Fidelity Japan Equity Rsh Enh ETF JPYAcc IE00BNGFMX61 | Yes | Equity | Japan | Large Cap Blend | |||||||||||||||||||||||||||||
| Fidelity US Equity Rsh Enh ETF USD Acc IE00BKSBGS44 | Yes | Equity | North America | All Cap Blend | Equity | North America | All Cap Blend | Fidelity US Equity Rsh Enh ETF USD Acc | IE00BKSBGS44 | USD | 0.30% | No | Yes | Yes | 19.88 | 21.35 | 13.66 | 1.16 | Unavailable | Unavailable | |||||||||||||
| Fidelity US Equity Rsh Enh ETF USD Acc IE00BKSBGS44 | Yes | Equity | North America | All Cap Blend | |||||||||||||||||||||||||||||
| First Trst VstUSEqModBffrETFAugA$Acc IE000TGSG3Y5 | Yes | First Trst VstUSEqModBffrETFAugA$Acc | IE000TGSG3Y5 | USD | 0.85% | No | Yes | Yes | 10.74 | 11.67 | 6.05 | 1.11 | Unavailable | Unavailable | |||||||||||||||||||
| First Trst VstUSEqModBffrETFAugA$Acc IE000TGSG3Y5 | Yes | ||||||||||||||||||||||||||||||||
| First Trust FactorFX ETF A USD IE00BD5HBQ97 | Yes | First Trust FactorFX ETF A USD | IE00BD5HBQ97 | USD | 0.75% | No | Yes | No | 11.85 | 7.97 | 4.50 | 0.71 | Unavailable | Unavailable | |||||||||||||||||||
| First Trust FactorFX ETF A USD IE00BD5HBQ97 | Yes | ||||||||||||||||||||||||||||||||
| Franklin Euro Short Maturity ETF Acc IE000STIHQB2 | Yes | Franklin Euro Short Maturity ETF Acc | IE000STIHQB2 | EUR | 0.05% | No | Yes | Yes | 1.78 | 3.09 | 0.47 | 0.78 | Unavailable | Unavailable | |||||||||||||||||||
| Franklin Euro Short Maturity ETF Acc IE000STIHQB2 | Yes | ||||||||||||||||||||||||||||||||
| HSBC Multi Factor Worldwide Eq ETF IE00BKZGB098 | Yes | Equity | Global | Large Cap Blend | Equity | Global | Large Cap Blend | HSBC Multi Factor Worldwide Eq ETF | IE00BKZGB098 | USD | 0.25% | No | Yes | No | 25.82 | 21.96 | 11.83 | 1.36 | Unavailable | Unavailable | |||||||||||||
| HSBC Multi Factor Worldwide Eq ETF IE00BKZGB098 | Yes | Equity | Global | Large Cap Blend | |||||||||||||||||||||||||||||
| Horizon Kinetics Full-Cycle Infl Eq ETF$ IE000Z7ELYY2 | Equity | Global | Small-Mid Cap | Equity | Global | Small-Mid Cap | Horizon Kinetics Full-Cycle Infl Eq ETF$ | IE000Z7ELYY2 | USD | 0.85% | Yes | No | 28.25 | 20.83 | 15.28 | 1.02 | Unavailable | Unavailable | |||||||||||||||
| Horizon Kinetics Full-Cycle Infl Eq ETF$ IE000Z7ELYY2 | Equity | Global | Small-Mid Cap | ||||||||||||||||||||||||||||||
| Invesco EUR Corp Bd ESG Mltfct ETFEURAcc IE00021E4FE3 | Yes | Fixed Income | Europe | EUR Corporate Bonds | Fixed Income | Europe | EUR Corporate Bonds | Invesco EUR Corp Bd ESG Mltfct ETFEURAcc | IE00021E4FE3 | EUR | 0.19% | No | Yes | No | 0.62 | 3.98 | 3.41 | 0.35 | Unavailable | Unavailable | |||||||||||||
| Invesco EUR Corp Bd ESG Mltfct ETFEURAcc IE00021E4FE3 | Yes | Fixed Income | Europe | EUR Corporate Bonds | |||||||||||||||||||||||||||||
| Invesco Global Actv ESG Eq ETF USD Acc IE00BJQRDN15 | Yes | Equity | Global | Large Cap Blend | Equity | Global | Large Cap Blend | Invesco Global Actv ESG Eq ETF USD Acc | IE00BJQRDN15 | EUR | 0.30% | No | Yes | Yes | 29.20 | 21.75 | 14.06 | 1.39 | Unavailable | Unavailable | |||||||||||||
| Invesco Global Actv ESG Eq ETF USD Acc IE00BJQRDN15 | Yes | Equity | Global | Large Cap Blend | |||||||||||||||||||||||||||||
| JPM EUR 1-5 yr IG Corp Bd Act ETF EURacc IE00BF59RW70 | Yes | JPM EUR 1-5 yr IG Corp Bd Act ETF EURacc | IE00BF59RW70 | EUR | 0.00% | No | Yes | Yes | 1.35 | 4.03 | 2.17 | 0.57 | Unavailable | Unavailable | |||||||||||||||||||
| JPM EUR 1-5 yr IG Corp Bd Act ETF EURacc IE00BF59RW70 | Yes | ||||||||||||||||||||||||||||||||
| JPM EUR IG Corp Bd Act ETF EUR Acc IE00BF59RX87 | Yes | Fixed Income | Europe | EUR Corporate Bonds | Fixed Income | Europe | EUR Corporate Bonds | JPM EUR IG Corp Bd Act ETF EUR Acc | IE00BF59RX87 | EUR | 0.00% | No | Yes | Yes | 0.94 | 4.18 | 3.44 | 0.41 | Unavailable | Unavailable | |||||||||||||
| JPM EUR IG Corp Bd Act ETF EUR Acc IE00BF59RX87 | Yes | Fixed Income | Europe | EUR Corporate Bonds | |||||||||||||||||||||||||||||
| JPM GBP Ultra-Short Inc ETF Act GBP Acc IE00BG47J908 | Yes | JPM GBP Ultra-Short Inc ETF Act GBP Acc | IE00BG47J908 | GBP | 0.00% | No | Yes | Yes | 4.13 | 4.93 | 0.51 | 0.78 | Unavailable | Unavailable | |||||||||||||||||||
| JPM GBP Ultra-Short Inc ETF Act GBP Acc IE00BG47J908 | Yes | ||||||||||||||||||||||||||||||||
| JPM Global EM Rsh Enh Eq Act ETF USD Inc IE000Y4K4833 | Yes | Equity | EM | Large Cap Growth | Equity | EM | Large Cap Growth | JPM Global EM Rsh Enh Eq Act ETF USD Inc | IE000Y4K4833 | USD | 0.00% | No | Yes | Yes | 42.43 | 23.72 | 17.54 | 1.05 | Unavailable | Unavailable | |||||||||||||
| JPM Global EM Rsh Enh Eq Act ETF USD Inc IE000Y4K4833 | Yes | Equity | EM | Large Cap Growth | |||||||||||||||||||||||||||||
| JPM Global HY Corp BdMlt-Fc ETFActUSDAcc IE00BKKCKJ46 | Yes | Fixed Income | Global | High Yield Bonds | Fixed Income | Global | High Yield Bonds | JPM Global HY Corp BdMlt-Fc ETFActUSDAcc | IE00BKKCKJ46 | USD | 0.00% | No | Yes | Yes | 6.07 | 9.04 | 4.99 | 0.85 | Unavailable | Unavailable | |||||||||||||
| JPM Global HY Corp BdMlt-Fc ETFActUSDAcc IE00BKKCKJ46 | Yes | Fixed Income | Global | High Yield Bonds | |||||||||||||||||||||||||||||
| JPM UK Eq Core ETF Act GBP Acc IE0009YQE5W1 | Yes | Equity | UK | Large Cap Blend | Equity | UK | Large Cap Blend | JPM UK Eq Core ETF Act GBP Acc | IE0009YQE5W1 | GBP | 0.00% | No | Yes | Yes | 22.31 | 17.51 | 9.24 | 1.32 | Unavailable | Unavailable | |||||||||||||
| JPM UK Eq Core ETF Act GBP Acc IE0009YQE5W1 | Yes | Equity | UK | Large Cap Blend | |||||||||||||||||||||||||||||
| JPM USD IG Corp Bd Act ETF USD acc IE00BF59RV63 | Yes | Fixed Income | US | USD Corporate Bonds | Fixed Income | US | USD Corporate Bonds | JPM USD IG Corp Bd Act ETF USD acc | IE00BF59RV63 | USD | 0.00% | No | Yes | Yes | 2.20 | 5.02 | 6.39 | 0.09 | Unavailable | Unavailable | |||||||||||||
| JPM USD IG Corp Bd Act ETF USD acc IE00BF59RV63 | Yes | Fixed Income | US | USD Corporate Bonds | |||||||||||||||||||||||||||||
| Ossiam Lux-OSSIAMEurpESGMachinLrngETF2C€ LU0811899946 | Yes | Equity | Europe | All Cap Blend | Equity | Europe | All Cap Blend | Ossiam Lux-OSSIAMEurpESGMachinLrngETF2C€ | LU0811899946 | EUR | 0.45% | Yes | Yes | 12.46 | 13.62 | 8.84 | 1.18 | Unavailable | Unavailable | ||||||||||||||
| Ossiam Lux-OSSIAMEurpESGMachinLrngETF2C€ LU0811899946 | Yes | Equity | Europe | All Cap Blend | |||||||||||||||||||||||||||||
| PIMCO Euro Short Mat ETF EUR Acc IE00BVZ6SP04 | Yes | PIMCO Euro Short Mat ETF EUR Acc | IE00BVZ6SP04 | EUR | 0.19% | No | Yes | Yes | 2.24 | 3.44 | 0.46 | 1.75 | Unavailable | Unavailable | |||||||||||||||||||
| PIMCO Euro Short Mat ETF EUR Acc IE00BVZ6SP04 | Yes | ||||||||||||||||||||||||||||||||
| PIMCO Sterling Short Maturity ETF IE00B622SG73 | Yes | PIMCO Sterling Short Maturity ETF | IE00B622SG73 | GBP | 0.19% | No | Yes | No | 4.21 | 5.00 | 0.40 | 1.22 | Unavailable | Unavailable | |||||||||||||||||||
| PIMCO Sterling Short Maturity ETF IE00B622SG73 | Yes | ||||||||||||||||||||||||||||||||
| PIMCOAdvLowDurUSCorpBdSourceETF ETF $ IE00BP9F2H18 | Yes | Fixed Income | US | USD Corporate Bonds | Fixed Income | US | USD Corporate Bonds | PIMCOAdvLowDurUSCorpBdSourceETF ETF $ | IE00BP9F2H18 | USD | 0.25% | No | Yes | Yes | 2.53 | 5.32 | 2.61 | 0.26 | Unavailable | Unavailable | |||||||||||||
| PIMCOAdvLowDurUSCorpBdSourceETF ETF $ IE00BP9F2H18 | Yes | Fixed Income | US | USD Corporate Bonds | |||||||||||||||||||||||||||||
| Xtrackers Portfolio ETF 1C LU0397221945 | Yes | Mixed Allocation | Global | Dynamic Allocation | Mixed Allocation | Global | Dynamic Allocation | Xtrackers Portfolio ETF 1C | LU0397221945 | EUR | 0.40% | No | Yes | Yes | 15.01 | 11.29 | 7.50 | 0.99 | Unavailable | Unavailable | |||||||||||||
| Xtrackers Portfolio ETF 1C LU0397221945 | Yes | Mixed Allocation | Global | Dynamic Allocation | |||||||||||||||||||||||||||||
| Xtrackers Portfolio Income ETF 1D IE00B3Y8D011 | Yes | Mixed Allocation | Global | Conservative Allocation | Mixed Allocation | Global | Conservative Allocation | Xtrackers Portfolio Income ETF 1D | IE00B3Y8D011 | EUR | 0.45% | No | Yes | No | 7.18 | 6.65 | 4.59 | 0.83 | Unavailable | Unavailable | |||||||||||||
| Xtrackers Portfolio Income ETF 1D IE00B3Y8D011 | Yes | Mixed Allocation | Global | Conservative Allocation | |||||||||||||||||||||||||||||
| iShares Conservative Ptf ETF EUR Acc IE00BLP53M98 | Yes | Mixed Allocation | Global | Conservative Allocation | Mixed Allocation | Global | Conservative Allocation | iShares Conservative Ptf ETF EUR Acc | IE00BLP53M98 | EUR | 0.25% | No | Yes | Yes | 5.84 | 5.06 | 4.50 | 0.50 | Unavailable | Unavailable | |||||||||||||
| iShares Conservative Ptf ETF EUR Acc IE00BLP53M98 | Yes | Mixed Allocation | Global | Conservative Allocation |
Performance: in %, over 1 year annualised
Source: Morningstar Direct, Data as of 31.08.2026